我希望有一个与<Table>
HTML标记类似的行为,即根据其内容调整框架的大小。
在我的上下文中,我使用UIStackView作为UITableViewCell的内容视图。由于单元格中的项是各种信息,因此单元格的最终高度应该是可变的。
我的策略是以编程方式构建一个单元格作为具有.Vertical轴的UIStackView,如下面的代码片段所示:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
let sv = UIStackView(frame: tableview.frame)
sv.axis = .Vertical
cell.addSubview(sv)
for i in information {
let l = UILabel()
l.text = i
sv.addSubViewAndArrange(l)
}
return cell
}
不幸的是,单元格大小不能根据内容进行调整,因此我必须自己设置单元格高度,如下所示:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return cellHeight // a constant
}
我该怎么补救呢?
2条答案
按热度按时间tyg4sfes1#
UIStackView
设计为根据内容增加其大小。为了使其工作,您需要在UIStackView
和UITableViewCell
之间设置约束。例如,如果UIStackView
是第一项,UITableViewCell
是它的超级视图,那么界面构建器中的约束如下所示:第一次
如果您喜欢在代码中设置约束条件,那也应该可以。
例如,假设名称为
stackView
和cellView
,则上述约束的Swift代码将如下所示:为了证明这是可行的,我在
cellForRowAt
函数中使用了这个函数。基本上,它将一个UILabel
的数字放入UIStackView
中,标签计数取决于行号。以下是最终结果:
https://github.com/yzhong52/AutosizeStackview
wfauudbj2#
我构建了这个示例,希望它能有所帮助,我创建了一个tableView,它使用了一个包含stackView的单元格,而stackView中加载的视图是从nib文件中获取的
https://github.com/Joule87/stackView-within-TableViewCell