iOS 9 上的静态 UITableViewCell 中的多行 UILabel
Posted
技术标签:
【中文标题】iOS 9 上的静态 UITableViewCell 中的多行 UILabel【英文标题】:Multiline UILabel within a Static UITableViewCell on iOS 9 【发布时间】:2015-09-14 05:54:12 【问题描述】:我正在尝试在静态 UITableViewCell 多行中创建一个 UILabel,具体取决于它的内容,它会发生变化。
在viewDidLoad
方法中,我有初始化标签内文本的代码,紧随其后的是:
cellLabel.text = "Here is some text, but because of how long it is, it has to span a number of lines."
cellLabel.numberOfLines = 0
cellLabel.sizeToFit()
tableViewCell.textLabel?.sizeToFit()
tableViewCell.textLabel?.numberOfLines = 0
tableViewCell.textLabel?.lineBreakMode = .ByWordWrapping
然后我正在尝试计算该行必须达到的高度以容纳多行标签:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
if (indexPath.section == 2 && indexPath.row == 0)
return cellLabel.frame.height
else
return 44
然而,返回的是一个多行 UITableViewCell 但文本的结尾被截断并且不显示。我会在 return definitionLabel.frame.height 的末尾添加一个值,但是标签的内容会有所不同。
有人可以告诉我如何使用 Swift 2.0 和 ios 9 在静态 UITableViewCell 中简单地拥有一个多行 UILabel。
注意:我已添加:
tableView.rowHeight = UITableViewAutomaticDimension
我正在使用一个基本的静态表格视图单元格,它默认应用了约束。
【问题讨论】:
与单元格的动态高度相同:tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 160.0 在不处理单元高度的情况下出售:raywenderlich.com/87975/… 我已经添加了 tableView.rowHeight = UITableVieeAutomaticDimension 并且没有运气。我有一个静态表格视图,所以只是使用一个具有自己约束的基本单元格。 你正在运行raywenderlich.com/87975/…的演示 你有解决办法吗?我也面临同样的挑战。我在静态表格单元格中有一个标签,我希望它是多行和自动高度。我已经尝试过tableView.rowHeight = UITableViewAutomaticDimension
和override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
。但就像你的一样,文本被截断了。
【参考方案1】:
在故事板上选择单元格并将自定义行高设置为 0。从 iOS 9 开始,这对我有用。
http://i.stack.imgur.com/WmjPX.png
这是 Xcode 7 中的一个错误,它无论如何都会在 xib xml 中设置单元格的高度,这在以前的 Xcode 中也是一个问题,但没有那么严重。当您正在处理的情节提要位于前台时,就会发生这种刷新。
在以前版本的 Xcode 中,我不得不手动删除 xib 文件编辑中的 tableviewcell rect 属性,一切都会好起来的,但最新版本一直搞砸了。
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="0.0" id="uWP-2k-uRh">
<rect key="frame" x="0.0" y="64" /> <-- Xcode 7 keeps adding this line here
那么你需要的 viewDidLoad 就是
override func viewDidLoad()
super.viewDidLoad()
tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension
感谢苹果...
【讨论】:
我认为你做错了什么。对我来说开箱即用。 这对我有用。我已经尝试了其他所有方法,包括按照此处的建议删除情节提要中的“rect”属性:***.com/questions/31979932/…我的项目是 Objective-C 而不是 Swift,但是将自定义行高设置为 0 效果很好。 从 Xcode 9 开始,取消选中“自定义”(而不是将高度设置为 0)也可以。但是,这会将 Interface Builder 上的单元格高度重置为 44(仍然比零好)。【参考方案2】:我已经尝试了所有可用的解决方案,从覆盖drawRect
到调用layoutSubviews
,但我想我只是插嘴说也许可以尝试再次重做那个表格视图单元格。
我刚刚做了,但我很困惑它终于可以开箱即用了。我尝试将以前的 XML 代码与新的 XML 代码进行比较,我看到的唯一明显的是在 </prototypes>
之后的末尾添加了一个 <section/>
标记。
【讨论】:
以上是关于iOS 9 上的静态 UITableViewCell 中的多行 UILabel的主要内容,如果未能解决你的问题,请参考以下文章
带有 Googlemap 静态 api 的 Nativescript - iOS 上的问题
如何将 armv7s 架构添加到 xcode 7 / ios 9 中的静态库?