UITableViewCell中的UILabel位置在第一次尝试时失败

刚开始iOS开发我的脚,所以我希望我在这里得到正确的详细程度…

我有一个UILabel ,加载在通过.xib创build的表格单元格中。 实际上有几个标签,其中一个标签长度不一(因此包装高度不同)。 heightForRowAtIndexPath等被正确覆盖,两个标签所需的高度被正确计算并分配给每个.frame

一旦设置了两个尺寸,我就设置较小(固定长度,总是一行高)的frame.origin.y以匹配较大标签的尺寸。 这可以通过逐步查看cellForRowAtIndexPath但是在新创build的单元格的初始显示中,原点看起来在容器中不是非常垂直居中,而不是在顶部。

单击“通过”单元格到不同的视图,并返回到(现在重用,大概已经适当大小的容器),位置设置为以前,它出现在我预期的地方。

cellForRowAtIndexPath返回后,容器似乎正在resize,并且在那里有一个新的位置被find用于我们的标签; 这可以解释为什么重复使用单元稍后解决了这个问题。

我已经尝试了内在和外在的模式和基线设置,拉伸设置等每一个明显理智的组合。在解释和/或解决方法的损失。

更新:

在定制UITableViewCell问题中改变定制UIButton的位置的build议解决了这个问题。 解决scheme是UITableViewCell并覆盖layoutSubviews ,从而有机会在TableView完成其正常定位之后重新定位子元素。 一旦这个人在这里回应,或者赏金到期,我会用代码回答自己。

如果我在一个UITableViewCell中做任何复杂的布局,我试图保持它的cellForRowAtIndexPath。 一个select是在- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath布局,但我更喜欢将布局封装在自定义的UITableViewCell类中。

制作你自己的UITableViewCell子类。 在init方法中创build自定义button/标签/视图并将其添加到单元格的contentView中,或者通过访问器属性来创build并添加它。 覆盖layoutSubviews和位置button按需要。

像这样的东西:

 @implementation MyCustomCell - (void) init { self = [super initWithStyle: UITableViewCellStyleDefault reuseIdentifier: nil]; if ( self != nil ) { _myButton = [[UIButton buttonWithType: UIButtonTypeRoundedRect] retain]; [self.contentView addSubview: _myButton]; } return self; } - (void) layoutSubviews { [super layoutSubviews]; // dynamic layout logic: if ( ... ) { _myButton.frame = CGRectMake( 10, 10, 100, 30 ); } else { _myButton.frame = CGRectMake( 20, 10, 50, 30 ); } } 

我也面临类似的问题。

放置在这个方法的代码为我工作。

 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { // here. }