【问题标题】:How do I get the real custom cell's width?如何获得真正的自定义单元格的宽度?
【发布时间】:2015-10-31 06:37:24
【问题描述】:

我在情节提要中有一个自定义单元格。我在情节提要中为包含其tableViewviewController 设置了iPhone 4.7 英寸。

因为我想在这个单元格内的scrollView 中布置一些UIImageViews,所以我需要知道单元格的宽度。我试图在layoutSubviews 中获得这个宽度,如下所示:

-(void)layoutSubviews
{
    [super layoutSubviews];
    CGFloat cellWidth = self.contentView.bounds.size.width;
}

它被多次调用,当我在 iPhone 5 上运行它时,前两次都不正确(故事板上的 375,然后是正确大小的 320)

无论如何,我如何获得单元格的实际宽度?

提前致谢。

【问题讨论】:

  • 您是否应用了情节提要中的任何约束?我的意思是这个视图是否支持自动布局?
  • @ShamimHossain 是的,我有。
  • 好的,然后看看我下面的答案,如果有效,别忘了标记为正确答案。干杯!

标签: ios objective-c uitableview custom-cell layoutsubviews


【解决方案1】:

最终事实是 UIKit 可以调用layoutSubviews 任意次数。您只需假设每次都是最后一次,并采取措施避免重复工作。例如。缓存先前调用中的self.bound.size,仅在更改时继续。

或者您可以在滚动视图和图像视图上设置约束,而不必担心手动布局。

【讨论】:

  • 我需要以编程方式布置多个图像视图,因为我从 Internet 获取它们的图像。所以我应该根据当前的 self.bound.size 进行布局,一旦收到新的,删除滚动视图的所有子视图并重新布局图像视图?
  • 不,你应该很聪明,只删除不再适合的视图。或者使用UICollectionView,让它担心什么合适。查看 App Store 应用:在垂直滚动视图中水平滚动集合视图。
【解决方案2】:

禁用自动布局?

如果单元格不支持自动布局,-(void)layoutSubviews 可以正常工作并给出您预期的高度和宽度。

启用自动布局?

在约束更新过程中覆盖它以调整您的特殊约束

- (void)updateConstraints
{
  [super updateConstraints];

  CGFloat cellWidth = CGRectGetWidth(self.bounds);
  NSLog(@"cellWidth %f", cellWidth);
}

希望这会奏效!

【讨论】:

  • 感谢您的回答;但是 updateConstraints 被调用一次,它返回的 cellWidth 是 375,这是不正确的。
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多