TableViewCell超出了TableView的范围

时间:2019-01-30 10:59:57

标签: ios swift uitableview

我有一个表格视图,并在其中添加了一个单元格,该单元格在视图的右侧具有标签。

这是我的手机的外观: enter image description here

但是当我运行应用程序时,这就是我得到的。 (它正在iPhone 6S上运行):

enter image description here

如您所见,标签被推出了。

iPhone XR上的结果很好。这是XR的屏幕截图: enter image description here

这是表视图委托所在的视图控制器的代码:

import UIKit

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self
    tableView.separatorStyle = .none

    let headerViewNibName = UINib(nibName: "HeaderCell", bundle: nil)
    tableView.register(headerViewNibName, forCellReuseIdentifier: "headerCell")
}

func  tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell", for: indexPath) as! HeaderCell
        cell.isUserInteractionEnabled = false
        return cell
    }

    return UITableViewCell()
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.row == 0 {
        return 138
    }

    return 0
}

}

有人可以解释为什么会这样吗?

编辑:

为带有可见约束的单元格视图附加屏幕截图: enter image description here

5 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您将有一个表格视图,其中有单元格和单元格内的标签。就像您说的那样,您已经针对超级视图指定了标签约束,您必须对单元本身的WRT标签进行约束。如果您正在使用情节提要,则从标签向单元格拖动并添加约束。希望对您有帮助

答案 1 :(得分:0)

随着屏幕尺寸的变化,不应静态设计用户界面。首先,您应该对控制器根视图和表视图进行适当的约束,以使表视图宽度与控制器根视图的宽度匹配。然后使标签的尾随约束不超过单元格的尾随。

答案 2 :(得分:0)

您必须为headerViewNibName设置框架。并且宽度应等于View的宽度。

答案 3 :(得分:0)

这可能是由于您的UITableView或UITableViewCell的.xib或表单元格中的Label的约束不正确造成的。因此,请执行以下步骤:

  • 将情节提要中的表视图约束设为顶部,底部,前导和尾随= 0 作为其超级视图。
  • 现在转到您的 UITableViewCell xib 并检查其框架矩形,然后将 Label 约束设置为上,下,前导,尾随= 0并确保您已选中情节提要中的约束到边距复选框。这样,随着每个单元格框架根据设备的变化,您的Label将适合作为表格单元格的Superview。
  • 现在将“标签文本”对齐方式属性设置为right,因为您需要在视图的右侧输入文本。
  • 现在将表格单元格框架设置为cellForRow,如下所示:

    for (auto& pot : {std::ref(pot1), std::ref(pot2), /*..,*/ std::ref(potn)}) {
         if (savePotentiometerState(pot)) {
             break;
         }
    }
    

答案 4 :(得分:0)

只需在您的手机上拨打layoutIfNeeded

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell", for: indexPath) as! HeaderCell
    cell.isUserInteractionEnabled = false
    cell.layoutIfNeeded()
    return cell
}

return UITableViewCell()
}