来自UITableView的错误值:iOS8中的rowHeight

cat*_*eof 19 uitableview ios ios7

我用来创建矩形的代码(至少在iOS7之前)是

CGRect rect = [cTableView frame];
rect.origin.y += [cTableView rowHeight];
searchOverlayView = [[BecomeFirstResponderControl alloc] initWithFrame:rect];
Run Code Online (Sandbox Code Playgroud)

在iOS7上,cTableView(一个实例UITableView)返回44.使用iPhone 5s在iOS8中进行测试-1.

为什么会这样?为了使我的应用程序向后兼容iOS7,需要使用哪些正确的代码?

Rog*_*Rog 19

Apple将iOS8中的默认行高更改为UITableViewAutomaticDimension,声明为-1.这意味着您的表视图已设置为自动单元格高度计算.

您将需要实现autoLayout(推荐)或实现新的委托方法:heightForRowAtIndexPath.这是一个关于自动布局的一个很好的问题:在UITableView中使用自动布局来获得动态单元格布局和可变行高

似乎你有效地编码44(旧的默认值),但是,你可以这样做(不推荐).

  • 令我感到困惑的是为什么Apple会这样做.在XIB中,我将rowHeight设置为43,在运行时它是43,我在XIB中将其设置为45,在运行时为45.我在XIB中将它设置为44,在运行时它是-1?不确定这与旧版应用程序兼容.它打破了我的旧应用程序(iOS7).在这个荒谬行为的文档中甚至没有提及.事实上,这里是文档中的讨论如何开始"行高是非负的......" (7认同)

Js *_*Lim 15

这让我奋斗了好几个小时.我最终将值硬编码为44:

self.tableView.rowHeight = 44;
Run Code Online (Sandbox Code Playgroud)