我正在与控制器进行简单的联系人应用程序:ContactTableViewController
和custome cell:ContactTableViewCell
。我创建了一个自定义表格视图单元格,其中样式为自定义,identifier
为ContactTableViewCell
,类也为ContactTableViewCell
。
该单元格有两个UILabel
字段,这些字段显示为ContactTableViewCell.swift
类,如下所示:
import UIKit
class ContactTableViewCell: UITableViewCell {
@IBOutlet weak var name: UILabel!
@IBOutlet weak var info: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
print("cell loaded with name: ", name)
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
现在我想在我的ContactViewController
中显示它们,我的控制器的相关部分看起来像这样:
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
// here we communicate with parts of the app that owns the data
override func tableView(_ tableView : UITableView
, cellForRowAt indexPath: IndexPath
) -> UITableViewCell {
let id = "ContactTableViewCell"
// deque a cell as an instance of ContactTableViewCell
guard let cell = tableView.dequeueReusableCell(withIdentifier: id, for : indexPath)
as? ContactTableViewCell else {
fatalError("dequed cell is not instance of ContactTableViewCell")
}
cell.name.text = "hello"
cell.info.text = "hello information"
然而,当我运行模拟时,我只看到两行“你好”,即使它应该是这样的:
hello
hello information
重复两次。这有什么问题?
答案 0 :(得分:1)
这是一个禁忌问题。您必须为名称UILabel和信息UILabel定义高度,宽度,x和y定位。字体大小对UILabel的高度起主导作用,宽度可以基于UILabel x字体大小的字符数,因此您不必明确表达UILabel的高度和宽度约束,但对于UIButton,您必须明确定义x,y,width,height的约束。对于UILabel,我们只需要定义x和y约束。
当您没有明确定义UI元素的约束时会发生什么情况,您的View的呈现将具有不可预测的结果,并且UI元素通常不会出现在视图上。
从您的代码中可以看出,您正在使用XCode设计器添加UILabel,以便您可以使用它来添加约束。您也可以通过编程方式添加约束。但我很确定你使用的是XCode Storyboard设计师。
无论是以编程方式还是通过XCode设计器,您需要在超级视图的顶部和左侧添加名称UILabel的约束,您可以稍后重新定位,然后将信息UILabel的x和y对齐方式约束为UILabel,水平对齐名称UILabel和+8垂直间距到名称UILabel的底部,这将把信息UILabel放在下面,并以UILabel名称为中心。
此Stackoverflow回答:https://stackoverflow.com/a/34448801/1258525
不是我在这张图片中圈出的前两个约束,它定义了视频质量UILabel的x和y:
然后看下面的下一个标签,Onset Threshold如何将自身限制在Video Quality标签的前沿,然后是VideoQuality标签下面的分隔符:
答案 1 :(得分:1)
很可能你没有足够的空间来放置两个标签。您可以通过以下方式在storyboard中设置行高:
答案 2 :(得分:1)
我的理论第二个标签被截断没有得到足够的宽度,并且可能是第二个标签中的行数是1.因此,尝试将行数设置为0并检查宽度和自动布局约束。