繁体   English   中英

iOS 7和iOS 8中的动态单元格高度-我只能在iOS 7中支持heightForRowAtIndexPath吗?

Dynamic cell height in iOS 7 and iOS 8 - can I only support heightForRowAtIndexPath in iOS 7?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个具有动态大小的单元格的表视图。 这在iOS 8中很好用,但在iOS 7中不支持。我需要实现tableView:heightForRowAtIndexPath,否则应用程序将在iOS 7中崩溃。如果这样做,我将必须计算单元格的高度。 问题是,如果我实现此方法,iOS 8会注意它,而不再执行其动态大小的单元魔术。 有什么方法只能为iOS 7客户端实现此方法吗?

3 个回复

我以前使用过类似的东西:

- (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)。 经过一整夜的研究,这是我的工作:

  1. 我应用了本指南中的解决方案: 动态表格视图单元格高度和自动布局

  2. 由于UILabel需要iOS 7设备的显式宽度,因此我以编程方式“清除”了iOS 8的此设置。在扩展的表格视图单元格中:

     - (void)awakeFromNib { // Initialization code if (IS_IOS_8_OR_LATER) { self.descriptionLabel.preferredMaxLayoutWidth = 0; } } 
  3. 我使用了指南中的RWLabel建议。

  4. 禁用 return UITableViewAutomaticDimension; 启用还是禁用,可能取决于表视图单元格中的子视图和约束。 尝试适合您的情况。

  5. 我将所有RWLabel的尾随空间的优先级更改为999(而不是1000)。 这消除了无法满足的约束警告。

希望这些解决方案能对某人有所帮助。

1 动态单元格高度iOS

我试图动态地重新计算包含UITextView的单元格的高度。 单元格的高度取决于UITextView的高度。 下面的源代码重新计算了表格中每个单元格的高度。 这是NSDictionary的一些文字。 重新计算所有高度后,我用包含在heightCells数组中的新高度重新加载了表格视图 ...

4 动态单元高度自动布局IOS

我一直在遵循本教程来实现动态像元高度。 dynamic-table-view-cell-height但它仅对我适用于ios 7,不适用于ios8。但是,它在iPAD上的ios 8中有效,所以我有点困惑为什么它在iphone上不起作用。 尽管我完全遵循了代码,但是本教程与实现它的方式之间存在一 ...

5 iOS heightForRowAtIndexPath,设置空单元格的高度

我正在这样设置heightForRowAtIndexPath: 当表不为空且大小正确计算时,将调用此方法,现在的问题是,如果表中有数据,则所有单元格的高度都会改变: http://img716.imageshack.us/img716/3025/yrgt.png 我已经尝试在 ...

2013-08-29 16:32:22 3 792   ios
7 iOS触发单细胞tableView:heightForRowAtIndexPath:

我有一个包含200-300个不同高度的单元格的表格+一个包含UITextView的单元格(这样的表格用于读取和发送消息)。 我需要在键入文本时动态调整单元格(包含UITextView)的高度。 我使用下一个代码来触发tableView:heightForRowAtIndexPath: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM