我正在尝试让我的单元格动态调整大小,我想利用iOS 8中新的自调整单元格。现在,我将约束设置为superview的边缘,并且单元格确实调整了自身的大小。问题是单元格有时有错误的高度,文本不会全部显示。如果文字较长,标签高度的错误也会更大。我正在试验这个问题是不是由新增加的边距引起的,但它也不起作用。
当我尝试调整旧方法的大小时,我发现cell.contentView.systemLayoutSizeFittingSize也给出了错误的高度。在表视图单元格中调整内容视图时可能会出现一些问题,但我无法弄清楚它是什么。
我准备了调整文本和图像大小的工作示例,供您测试:
https://dl.dropboxusercontent.com/u/35953801/Cell%20test.zip
编辑:
还有一个问题,当我尝试实现无限滚动时,reloadTable总是将其滚动到顶部。当我尝试使用insertRowsAtIndexPaths时,它开始跳到错误的位置并且非常糟糕。
以下是测试的更新代码:
https://dl.dropboxusercontent.com/u/35953801/Cell%20test2.zip
编辑2:
正如@gabbler建议的那样,实现可靠无限滚动的最佳方法是以旧方式进行。我还没有找到如何使用storyboard原型单元格在heightForRow方法中测量它们的方法。如果你尝试这样的东西,你会陷入无限循环,因为dequeReusableCell实际上调用了heightForRow:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
var cell = tableView.dequeueReusableCellWithIdentifier("CellProgrammatical", forIndexPath: indexPath) as TableViewCell
可能可以使用Nib资源为单元格设置它,但最好的方法可能是让您自己头疼,按照https://github.com/smileyborg/TableViewCellWithAutoLayout并以编程方式设置约束。
iOS8需要做一件事。它最初会向44添加额外约束UIView-Encapsulated-Layout-Height,如果它高于该值,则会破坏单元格。有必要将所有垂直约束设置为较低优先级(999)。
这是一个例子,工作无限滚动:
https://dl.dropboxusercontent.com/u/35953801/Cell%20test3.zip
感谢您的帮助
答案 0 :(得分:1)
FWIW当我在标签和单元格边距之间设置约束而不是单元格本身时,我遇到了这个问题。边距很奇怪,在计算preferredMaxLayoutWidth
时似乎没有正确考虑。
更改我要附加到单元格的约束可以解决问题。
答案 1 :(得分:0)
您的单元格中有一个标签,其中设置了首选宽度,删除设置似乎可以解决问题。
由于您已经使标签宽度与单元格宽度相等,因此无需设置首选宽度。
并尝试删除这些代码。
self.tableView.estimatedRowHeight = 600;
tableView.reloadData()
这似乎是多余的。
答案 2 :(得分:-1)
我使用以下代码计算高度 这里20是我的字体大小
UIFont *font = [UIFont systemFontOfSize:20];
NSDictionary *userAttributes = @{NSFontAttributeName: font,
NSForegroundColorAttributeName: [UIColor blackColor]};
NSString *text = self.userModel.quote;
CGSize textSize = [text sizeWithAttributes: userAttributes];
ht = 20;
if (textSize.width > [FunctionUtils getViewWidth]) {
ht = (textSize.width/([FunctionUtils getViewWidth]));
ht = (ceil(ht))*20+35;
}