1

我使用 Any-Any SizeStoryboard并为UITableViewCell,

  1. 引导空间到 SuperView -16.00px
  2. SuperView 的尾随空间 -16.00px
  3. SuperView 的顶部空间 0.00px
  4. SuperView 的底部空间 0.00px

当我打印UITableViewCell 适用于所有尺寸的 iphone 的框架时,我得到了框架大小

BookTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BookTableViewCellID"];
if (cell==nil) {
   cell = [[BookTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"BookTableViewCellID"];
} 
NSLog(@"TextView Cell Frame %@ ",NSStringFromCGRect( cell.contentView.frame));

以及输出 textView 单元格框架 {{0, 0}, {600, 44}}。这里的宽度是 600,与 Any-Any Size 的宽度相同。

但是对于 iPhone5,我希望这里的宽度为 320。我怎样才能获得UITableViewCell.

4

1 回答 1

1

我想我刚刚遇到了类似的问题,我想我已经解决了。

我的问题源于将最初在 iOS 6 的 XCode 4.7 中设置的 Storyboard 转换为 iOS 9 的 xCode 7(我认为它与 xCode 6 和 iOS 8 相同)。在 Simulated Metrics 中,旧 iPhone 特定尺寸一切正常,但在将所有内容转换为新 Autolayout 的 600x600 尺寸时,我遇到了类似的问题。

我已经正确调整了所有子视图的大小和间距,但是我添加到自定义 UITableViewCells 的框架绘制不正确:左边距正确,高度也是正确的,但框架正在从屏幕右侧绘制。问题是单元格内的所有子视图(一个 UILabel 和一个 UISwitch)都在正确的位置绘制。

这让我意识到,就像 OP 一样,我正在添加在 cellForRowAtIndexPath 中绘制我的框架的子层。显然,在新的 Autolayout 中使用 600x600 大小的模板,UITableViewCell 的宽度在 dequeReusableCellWithIdentifier 之后尚未设置,但在设置的后期。这让我意识到我们可能不应该在 cellForRowAtIndexPath 中做任何涉及单元格尺寸的事情,而只是设置属性等等,除非我完全不理解这一点。

解决方案:实现 UITableViewCell 的子类并在 drawRect 中完成所有绘图。到那时,您的约束应该都已正确设置。

于 2015-11-08T03:31:33.357 回答