【发布时间】:2014-08-09 17:07:33
【问题描述】:
tldr;自动约束似乎在 push segue 时中断并返回到自定义单元格的视图
编辑:我提供了一个 github 示例项目,展示了发生的错误 https://github.com/Matthew-Kempson/TableViewExample.git
我正在创建一个应用程序,它需要自定义 UITableCell 的标题标签,以允许根据帖子标题的长度改变行。单元格正确加载到视图中,但是如果我按下一个单元格以将推送中的帖子加载到包含 WKWebView 的视图中,您可以看到,如屏幕截图所示,单元格立即移动到不正确的位置。通过 UINavigationController 的后退按钮加载视图时也会看到这一点。
在这个特定的示例中,我按下了最后一个单元格,标题为“我在巴黎拍了一张照片的两个伙伴”,所有内容都正确加载。然后如下一个屏幕截图所示,在加载第二个视图的背景下,单元格都出于未知原因向上移动。然后,当我重新加载视图时,您可以看到屏幕略微向上移动,并且我实际上无法滚动低于显示的位置。当视图加载回底部单元格下方没有消失的空白区域时,这似乎与其他测试一样是随机的。
我还附上了一张图片,其中包含单元格所具有的约束。
图片(我显然需要更多的声誉才能在这个问题中提供图片,所以它们在这个 imgur 相册中):http://imgur.com/a/gY87E
我的代码:
自定义单元格中允许单元格在旋转时正确调整视图大小的方法:
override func layoutSubviews() {
super.layoutSubviews()
self.contentView.layoutIfNeeded()
// Update the label constaints
self.titleLabel.preferredMaxLayoutWidth = self.titleLabel.frame.width
self.detailsLabel.preferredMaxLayoutWidth = self.detailsLabel.frame.width
}
表格视图中的代码
override func viewDidLoad() {
super.viewDidLoad()
// Create and register the custom cell
self.tableView.estimatedRowHeight = 56
self.tableView.rowHeight = UITableViewAutomaticDimension
}
创建单元格的代码
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
if let cell = tableView.dequeueReusableCellWithIdentifier("LinkCell", forIndexPath: indexPath) as? LinkTableViewCell {
// Retrieve the post and set details
let link: Link = self.linksArray.objectAtIndex(indexPath.row) as Link
cell.titleLabel.text = link.title
cell.scoreLabel.text = "\(link.score)"
cell.detailsLabel.text = link.stringCreatedTimeIntervalSinceNow() + " ago by " + link.author + " to /r/" + link.subreddit
return cell
}
return nil
}
如果您需要更多代码或信息,请询问,我将提供必要的内容
感谢您的帮助!
【问题讨论】:
-
我遇到了类似的问题。你能解决问题吗?
-
我也遇到了这个问题,但我的限制在代码中。
-
您正在使用自动调整大小的表格视图单元格,我发现这在测试版中存在很大问题(正如在测试版中所预期的那样;自动调整大小的集合视图单元格更糟糕)。你的问题的标题说你正在使用 beta5;您的示例项目似乎在 beta6 中运行得更好(尽管仍然不完美)。
-
检查@POB 的回答,是的,我同意 beta 6 略有改进,但仍不如预期
-
我在 xCode 6.1 中看到了同样的问题。
标签: uitableview swift ios8