我试图动态地重新计算包含UITextView的单元格的高度。 单元格的高度取决于UITextView的高度。 下面的源代码重新计算了表格中每个单元格的高度。 这是NSDictionary的一些文字。 重新计算所有高度后,我用包含在heightCells数组中的新高度重新加载了表格视图 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个具有动态大小的单元格的表视图。 这在iOS 8中很好用,但在iOS 7中不支持。我需要实现tableView:heightForRowAtIndexPath,否则应用程序将在iOS 7中崩溃。如果这样做,我将必须计算单元格的高度。 问题是,如果我实现此方法,iOS 8会注意它,而不再执行其动态大小的单元魔术。 有什么方法只能为iOS 7客户端实现此方法吗?
我以前使用过类似的东西:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self dequeueReusableCellWithIdentifier:@"CellIdentifier"];
// Stuff & Things
[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];
return [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
}
iOS 8中新的内部自动布局自调整大小单元无法神奇地反映回iOS7。但这不是问题。 如果您想向后兼容iOS 7,正如您正确地说的那样,这意味着您将自己确定单元格高度,以便可以从tableView:heightForRowAtIndexPath:
返回正确的值。 这是我们在iOS 4、5、6和7中所做的。这在iOS 8中也仍然有效(并且反而可能会更快)。
所以我的建议是:就像在iOS 7上那样编写代码。如果您在Objective-C中进行编码,则可能会有两组不同的代码(条件编译),甚至在Swift中,您也可以使用两种不同的类,具体取决于在什么系统上我们发现自己; 但我认为这有点过头了-这是等待代码维护的噩梦。
在调试日志中出现UIViewAlertForUnsatisfiableConstraints
错误。
无法同时满足约束条件。 以下列表中至少有一个约束是您不想要的约束。 尝试以下操作:(1)查看每个约束,并尝试找出不期望的约束; (2)查找添加了一个或多个不必要约束的代码并进行修复。 (注意:如果看到的是您不了解的NSAutoresizingMaskLayoutConstraints,请参阅文档的UIView属性translationsAutoresizingMaskIntoConstraints)(“”,“”,“”)
如果没有tableView:heightForRowAtIndexPath:
则单元格看起来很好。 因此,我想在iOS 8中禁用它。@batu在另一篇文章中提供了一种解决方案:在iOS 7中实现heightForRowIndexPath :,但在iOS 8中使用编译时宏将其删除 。 感谢@batu,解决方案非常简单:
#define IS_IOS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
-(CGFloat) tableView: (UITableView * ) tableView heightForRowAtIndexPath: (NSIndexPath * ) indexPath {
if (IS_IOS_8_OR_LATER) {
return UITableViewAutomaticDimension;
}
// Your iOS 7 code here.
}
但是 ,我的手机仍然在iPhone 8的iOS 8中有高度问题。其原因似乎是UILabel的固定宽度(该宽度设计用于320pt)。 经过一整夜的研究,这是我的工作:
我应用了本指南中的解决方案: 动态表格视图单元格高度和自动布局 。
由于UILabel需要iOS 7设备的显式宽度,因此我以编程方式“清除”了iOS 8的此设置。在扩展的表格视图单元格中:
- (void)awakeFromNib { // Initialization code if (IS_IOS_8_OR_LATER) { self.descriptionLabel.preferredMaxLayoutWidth = 0; } }
我使用了指南中的RWLabel
建议。
我禁用 return UITableViewAutomaticDimension;
。 启用还是禁用,可能取决于表视图单元格中的子视图和约束。 尝试适合您的情况。
我将所有RWLabel的尾随空间的优先级更改为999(而不是1000)。 这消除了无法满足的约束警告。
希望这些解决方案能对某人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.