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

Pau*_*oub -7 uitableview uikit ios

刚刚开始使用iOS开发,我希望我能在这里获得正确的详细信息......

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

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

单击"穿过"单元格到另一个视图,然后返回到(现在重用,并且可能已经是正确大小的容器),位置设置为之前,它出现在我预期的位置.

看起来像容器后被调整cellForRowAtIndexPath收益,并在那里的某处新的位置找到了我们的标签; 这可以解释为什么以后重复使用单元格可以解决问题.

我已经尝试了内外模式和基线设置,拉伸设置等各种明显合理的组合.无法解释和/或解决方法.

更新:

关于在自定义UITableViewCell问题中更改自定义UIButton位置的建议解决了这个问题.解决方案是子类化UITableViewCell和覆盖layoutSubviews,从而有机会在TableView完成其正常定位后重新定位子元素.一旦这个人在这里做出回应,或者赏金到期,我将用代码回答我自己.

Tom*_*ift 6

如果我在UITableViewCell中执行任何复杂的布局,我会尝试将其保留在cellForRowAtIndexPath之外.一种选择是进行布局,- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath但我更喜欢将布局封装在自定义UITableViewCell类中.

创建自己的UITableViewCell子类.在init方法中创建自定义按钮/标签/视图并将其添加到单元格的contentView中,或者通过访问者属性懒惰地创建和添加它.覆盖layoutSubviews并根据需要设置按钮.

像这样的东西:

@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 );

   }
}
Run Code Online (Sandbox Code Playgroud)