为什么我的桌子在我的手机上查看单元格的高度如此之大,但在模拟器中却没有?

时间:2016-04-02 07:27:00

标签: ios iphone swift uitableview

我刚刚开发完应用程序并决定将其安装在手机上。然后我发现我的桌面视图在我的手机上看起来有所不同!

这是应该看到的。 (仿真)

enter image description here

这就是我所看到的:(我的电话)

enter image description here

正如您所看到的,手机上的表格视图单元格在我的手机上看起来“更长”,但在模拟器中看起来很正常。我不明白为什么会这样。你能告诉我为什么吗?

我的手机是iPhone 6s Plus,运行iOS 8.1.2。我的模拟器是iPhone 6s Plus,运行iOS 9.3

要重现这一点,请在故事板中添加一个表视图控制器,并将这些内容放入原型单元格中:

enter image description here enter image description here

黑色边框是图像视图。

然后,你知道,就像我一样把一些单元格放在表格视图中。

以下是表格视图的代码,以备不时之需:

class ColorSchemeController: UITableViewController {
    var color: UIColor!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 5
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch section {
        case 0...2:
            return 3
        case 3:
            var h: CGFloat = 0
            color.getHue(&h, saturation: nil, brightness: nil, alpha: nil)
            if h == 0 {
                return 3
            }
            return 5
        case 4:
            return 2
        default:
            return 0
        }
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath)
        let imageView = cell.viewWithTag(1)! as! UIImageView
        let label = cell.viewWithTag(2)! as! UILabel

        func setColor(color: UIColor) {
            imageView.backgroundColor = color
            label.text = color.hexDescription()
        }

        switch indexPath.section {
        case 0:
            switch indexPath.row {
            case 0:
                setColor(self.color)
            case 1:
                setColor(self.color.rotateHueByDegrees(120))
            case 2:
                setColor(self.color.rotateHueByDegrees(-120))
            default:
                assert(false)
            }
        case 1:
            switch indexPath.row {
            case 0:
                setColor(self.color)
            case 1:
                setColor(self.color.rotateHueByDegrees(150))
            case 2:
                setColor(self.color.rotateHueByDegrees(-150))
            default:
                assert(false)
            }
        case 2:
            switch indexPath.row {
            case 0:
                setColor(self.color)
            case 1:
                setColor(self.color.rotateHueByDegrees(30))
            case 2:
                setColor(self.color.rotateHueByDegrees(-30))
            default:
                assert(false)
            }
        case 3:
            switch indexPath.row {
            case 0:
                setColor(self.color)
            case 1:
                var h: CGFloat = 0
                color.getHue(&h, saturation: nil, brightness: nil, alpha: nil)

                if h == 0 {
                    var v: CGFloat = 0
                    self.color.getHue(nil, saturation: nil, brightness: &v, alpha: nil)
                    if v <= 0.1 {
                        setColor(self.color.incrementValueBy(0.1))
                    } else {
                        setColor(self.color.incrementValueBy(-0.1))
                    }
                    break
                }

                var s: CGFloat = 0
                self.color.getHue(nil, saturation: &s, brightness: nil, alpha: nil)
                if s <= 0.1 {
                    setColor(self.color.incrementSaturationBy(0.1))
                } else {
                    setColor(self.color.incrementSaturationBy(-0.1))
                }
            case 2:
                var h: CGFloat = 0
                color.getHue(&h, saturation: nil, brightness: nil, alpha: nil)

                if h == 0 {
                    var v: CGFloat = 0
                    self.color.getHue(nil, saturation: nil, brightness: &v, alpha: nil)
                    if v >= 0.9 {
                        setColor(self.color.incrementValueBy(-0.2))
                    } else {
                        setColor(self.color.incrementValueBy(0.2))
                    }
                    break
                }

                var s: CGFloat = 0
                self.color.getHue(nil, saturation: &s, brightness: nil, alpha: nil)
                if s >= 0.9 {
                    setColor(self.color.incrementSaturationBy(-0.2))
                } else {
                    setColor(self.color.incrementSaturationBy(0.2))
                }
            case 3:
                var v: CGFloat = 0
                self.color.getHue(nil, saturation: nil, brightness: &v, alpha: nil)
                if v <= 0.1 {
                    setColor(self.color.incrementValueBy(0.1))
                } else {
                    setColor(self.color.incrementValueBy(-0.1))
                }
            case 4:
                var v: CGFloat = 0
                self.color.getHue(nil, saturation: nil, brightness: &v, alpha: nil)
                if v >= 0.9 {
                    setColor(self.color.incrementValueBy(-0.2))
                } else {
                    setColor(self.color.incrementValueBy(0.2))
                }
            default:
                assert(false)
            }
        case 4:
            switch indexPath.row {
            case 0:
                setColor(self.color)
            case 1:
                setColor(self.color.rotateHueByDegrees(180))
            default:
                assert(false)
            }
        default:
            assert(false)
        }

        return cell
    }

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        switch section {
        case 0:
            return "Triadic"
        case 1:
            return "Split Complements"
        case 2:
            return "Analogous"
        case 3:
            return "Monochromatic"
        case 4:
            return "Complements"
        default:
            return nil
        }
    }
}

如果你无法重现,这里是github链接:https://github.com//Sweeper777/ColorBible

下载Xcode项目并在手机上运行。

2 个答案:

答案 0 :(得分:2)

我可以在模拟器8.1上重现相同的效果 我注意到rowHeight的{​​{1}}设置为-1(tableView),因此该问题与动态大小调整有关(不确定为什么,似乎是一种不同的行为) iOS 8)。

这似乎解决了这个问题(假设您不需要动态调整大小):

UITableViewAutomaticDimension

答案 1 :(得分:1)

在返回单元格之前尝试这样的事情

tableView.estimatedRowHeight = 100.0
tableView.rowHeight = UITableViewAutomaticDimension

其中“100.0”是您估计行高的原因。