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

时间:2011-12-04 04:15:08

标签: ios uikit uitableview

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

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

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

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

似乎就像在cellForRowAtIndexPath返回后容器正在调整大小一样,并且在那里的某处找到了我们标签的新位置;这可以解释为什么以后重复使用单元格可以解决问题。

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

更新

关于Changing the position of custom UIButton in custom UITableViewCell问题的建议解决了这个问题。解决方案是继承UITableViewCell并覆盖layoutSubviews,从而有机会在TableView完成正常定位后重新定位子元素。一旦这个人在这里做出回应,或者赏金到期,我会用代码回答自己。

2 个答案:

答案 0 :(得分: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 );

   }
}

答案 1 :(得分:0)

我也遇到过类似的问题。

将代码放在此方法中对我有用。

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