热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在iOS8上的UITableView中重叠标签,但在iOS7中没有重叠标签-OverlappingLabelinUITableViewoniOS8butnotiniOS7

Itseemsthatalabel(lblscore)isoverlappingifIrunmyapponiOS8butnotiniOS7.WhenIche

It seems that a label (lblscore) is overlapping if I run my app on iOS8 but not in iOS 7. When I check it, the cell.addSubviews(lblscore) caused it but I cannot delete it because if I do, that label will not be displayed at all. I'm not using a storyboard.

如果我在iOS8上运行我的应用程序而不是在iOS 7中运行我的应用程序似乎重叠了标签(lblscore)。当我检查它时,cell.addSubviews(lblscore)导致它但我无法删除它,因为如果我这样做,那个标签将根本不显示。我没有使用故事板。

this is my codes in cellForRowAtIndexPath

这是我在cellForRowAtIndexPath中的代码

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
    var i = 0
    var lblname = UILabel()
    var lblmsg = UILabel()
    let row = indexPath.row
    var forName = ""
    var forScore = 0
    if let not_me = threads[row]["not_me"] as? NSDictionary{
        if let username = not_me["username"] as? String{
            forName = username
        }
        if let score = threads[row]["partner_score"] as? Int{
            forScore = score
        }
        if (not_me == [:]){
            if let username = defaults.valueForKey("username") as? String{
                forName = username
            }
            if let score = threads[row]["author_score"] as? Int{
                forScore = score
            }
        }
    }
    for sub in cell.subviews{
        if (sub.subviews.count>6){
            for sub1 in sub.subviews{
                i++
                if ((i>0) && !(i==7)){
                    switch (i){
                    case 3:
                        lblmsg = sub1 as! UILabel
                        lblmsg.text = ""
                        lblmsg.text = threads[row]["content"] as? String
                        lblmsg.sizeToFit()
                    case 4:
                        lblname = sub1 as! UILabel
                        lblname.text = ""
                        lblname.sizeToFit()
                        lblname.text = forName
                        lblname.sizeToFit()
                        lblname.frame = CGRectMake(40, 10, lblname.bounds.width, lblname.bounds.height+4)
                        lblmsg.frame = CGRectMake(40, lblname.bounds.height-5, UIScreen.mainScreen().bounds.width-100,50)
                    case 5:
                        let lbldate : UILabel = sub1 as! UILabel
                        lbldate.text = ""
                        lbldate.sizeToFit()
                        lbldate.text = threads[row]["timeAgo"] as? String
                        lbldate.sizeToFit()
                        lbldate.frame = CGRectMake(UIScreen.mainScreen().bounds.width/3*2, 15, lbldate.bounds.width, 15)
                    case 6:
                        let lblscore : UILabel = sub1 as! UILabel
                        lblscore.text = ""
                        lblscore.sizeToFit()
                        lblscore.text = "\(forScore)"
                        lblscore.sizeToFit()
                        if(lblscore.bounds.width == 15){
                            lblscore.frame = CGRectMake(lblname.bounds.width+50, 10, lblscore.bounds.width+5, lblscore.bounds.height+4)}
                        else{
                            lblscore.frame = CGRectMake(lblname.bounds.width+50, 10, lblscore.bounds.width+10, lblscore.bounds.height+4)}
                    default:
                        print("")
                    }
                }
                if (i==7){
                    let btnDelete = sub1 as! UIButton
                    btnDelete.tag = row
                }
            }
        }
        else{
            cell.alpha = 0
            let lblscore = UILabel()
            let btnDelete = UIButton(frame: CGRectMake(UIScreen.mainScreen().bounds.width-18, 22.5, 22, 30))
            btnDelete.tag = row
            btnDelete.addTarget(self, action: "openDeleteBar:", forControlEvents: UIControlEvents.TouchUpInside)
            lblscore.backgroundColor = UIColor(red: (102/255), green: (193/255), blue: (144/255), alpha: 1)
            btnDelete.backgroundColor = UIColor(patternImage: UIImage(named: "grayBin")!)
            lblname.text = forName
            lblname.sizeToFit()
            lblscore.text = "\(forScore)"
            lblscore.sizeToFit()
            lblname.frame = CGRectMake(40, 10, lblname.bounds.width, lblname.bounds.height+4)
            let lblmsg = UILabel(frame: CGRectMake(40, lblname.bounds.height-5, UIScreen.mainScreen().bounds.width-100,50))
            lblmsg.text = threads[row]["content"] as? String
            if(lblscore.bounds.width == 15){
                lblscore.frame = CGRectMake(lblname.bounds.width+40, 10, lblscore.bounds.width+5, lblscore.bounds.height+4)}
            else{
                lblscore.frame = CGRectMake(lblname.bounds.width+40, 10, lblscore.bounds.width+10, lblscore.bounds.height+4)}
            lblscore.layer.borderWidth = 1
            lblscore.clipsToBounds = true
            lblscore.layer.cornerRadius = 10
            lblscore.textAlignment = .Center
            let lbldate = UILabel()
            lbldate.text = threads[row]["timeAgo"] as? String
            lbldate.sizeToFit()
            lbldate.frame = CGRectMake(UIScreen.mainScreen().bounds.width/3*2, 15, lbldate.bounds.width, 15)
            lblname.fOnt= UIFont(name: "Roboto", size: 15)
            lblmsg.fOnt= UIFont(name: "Roboto", size: 13)
            lbldate.fOnt= UIFont(name: "Roboto", size: 13)
            lblscore.fOnt= UIFont(name: "Roboto", size: 15)
            lbldate.textColor = UIColor.lightGrayColor()
            lblmsg.textColor = UIColor.lightGrayColor()
            lblscore.textColor = UIColor.whiteColor()
            cell.selectiOnStyle= .None
            cell.addSubview(lblmsg)
            cell.addSubview(lblname)
            cell.addSubview(lbldate)
                cell.addSubview(lblscore)
            cell.addSubview(btnDelete)
            UIView.animateWithDuration(0.2, delay: 0, options: nil, animations: {
                cell.alpha = 1
                }, completion: nil)
        }
    }
    return cell
}

1 个解决方案

#1


0  

I hope this will help anyone with this situation. I found the solution by myself. Since my app can run in iOS 8 and iOS 7, the first thing to do is identify the version then identify the cell. To know if the cell is empty ,'cell == nil' will never work since a cell already have 2 subviews (content view and separator) in iOS8. In iOS 7 before you get the cell you have to go through it's wrapper.

我希望这可以帮助处理这种情况的任何人。我自己找到了解决方案。由于我的应用程序可以在iOS 8和iOS 7中运行,因此要做的第一件事是确定版本然后识别单元格。要知道单元格是否为空,'cell == nil'将永远不会工作,因为一个单元格在iOS8中已经有2个子视图(内容视图和分隔符)。在获得单元格之前的iOS 7中,您必须通过它的包装器。

to further explain...

进一步解释......

let version = "\(Array(String(UIDevice.currentDevice().systemVersion))[0])"//get device version
if (version == "7"){//if iOS 7
    for wrapper in cell.subviews{//go to the wrapper
        if (wrapper.subviews.count==2){//if the wrapper contains the content view and the separator only
            //Here you will add the contents of the cell
        }
        else{//if wrapper has more subview which indicate that it is already filled
        var i = 0
                for sub in wrapper.subviews{//scan all subviews of wrapper
                    i++
                    if (i>2){//delete items 3 and beyond since the content view and separator is in the first 2
                        sub.removeFromSuperview()//remove them
                    }
                }
                //Here you will add the contents of the cell
        }
}
}
else{//if iOS 8
if (cell.subviews.count==2){//if the cell contains the content view and the separator only
            //Here you will add the contents of the cell
        }
        else{//if cell has more subview which indicate that it is already filled
        var i = 0
                for sub in cell.subviews{//scan all subviews of wrapper
                    i++
                    if (i>2){//delete items 3 and beyond since the content view and separator is in the first 2
                        sub.removeFromSuperview()//remove them
                    }
                }
                //Here you will add the contents of the cell
        }
    }
}

Now, when the the table tries to reuse a cell, it will delete the contents of that cell before adding the new contents. I hope this will help many.

现在,当表尝试重用单元格时,它将在添加新内容之前删除该单元格的内容。我希望这会对很多人有所帮助。


推荐阅读
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
author-avatar
mobiledu2502859427
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有