UILabel 位置在 UITableviewcell 内没有改变

Posted

技术标签:

【中文标题】UILabel 位置在 UITableviewcell 内没有改变【英文标题】:UILabel Position not change inside UITableviewcell 【发布时间】:2014-12-13 07:33:58 【问题描述】:

我正在尝试更改自定义 UITableViewCell 中包含的 UILabel 的位置,但它没有移动。我启用了自动布局。

- (void)updateLayout

    NSArray* comp = [self.accessibilityHint componentsSeparatedByString:@"/"];
    if (comp.count > 1)
    
    CGRect rect = _imageViewT.frame;
    rect.origin.x = 20 * comp.count;
    rect.size.width = 44.0;
    [_imageViewT setFrame:rect];
    [_imageConstraint setConstant:_imageViewT.frame.origin.x-8];

    rect = _lableT.frame;
    rect.origin.x = _imageViewT.frame.size.width+_imageViewT.frame.origin.x+8;
    rect.size.width = self.frame.size.width-rect.origin.x-40;
    [_lableT setFrame:rect];
    //[_imageConstraint setConstant:_imageViewT.frame.origin.x-8];



else

    CGRect rect = _imageViewT.frame;
    rect.origin.x = 10;
    rect.size.width = 43.0;
    [_imageViewT setFrame:rect];
    [_imageConstraint setConstant:2];

    rect = _lableT.frame;
    rect.origin.x = 62;
    rect.size.width = self.frame.size.width-rect.origin.x-40;
    [_lableT setFrame:rect];

我正在从 cellForRowAtIndexPath 调用更新方法。 self.accessibilityHint 包含字符串,如 aa/bb/cc、aa/cc

【问题讨论】:

【参考方案1】:

UITableViewCell 将在layoutSubviews: 中在 cellForRowAtIndexPath: 之后布局子视图,因此您的布局将在单元格的 layoutSubviews 中重置。 您应该将布局代码从 cellForRowAtIndexPath: 移动到单元格的 layoutSubviews。

【讨论】:

是的,我也这样做了。它工作正常。但是现在当我选择任何行时,它会再次改变位置。或者当我旋转我的设备时,它会再次改变位置。 是的,=layoutSubvies= 会被调用多次,如果单元格认为它应该重新布局自己,例如帧改变,setSelected:。因此,如果您将布局代码放在 layoutSubvies 中,则必须确保它始终正常工作。也许您必须创建一些属性来识别单元格的当前状态,然后您可以根据该属性进行不同的布局。 能否请您告诉我如何获取当前单元格状态。 如果我不调用 [super layoutSubviews] 就可以正常工作,但在这种情况下 UITableViewCellAccessoryCheckmark 没有显示在正确的位置 是的,你应该调用 [super layoutSubviews],单元格将在 super 方法中布局 contentView/textLabel/detailTextLabel/accessoryView/backgroundView/...。我说的“单元格状态”是指“comp.count > 1”与否,而不是UITableViewCell的系统状态。【参考方案2】:

设置标签的 autoresizingMask 属性,我总是将它与单元格的子视图一起使用。

【讨论】:

以上是关于UILabel 位置在 UITableviewcell 内没有改变的主要内容,如果未能解决你的问题,请参考以下文章

在特定位置截断 UILabel

如何在多行 UILabel 中找到最后一个文本行的位置,或者让 UILabel 有 0 填充

UILabel 位置在 UITableviewcell 内没有改变

如何在不同的方向设置 UILabel 的位置

在 Tableview 中,我想知道如何在单元格最后位置设置多行 UILabel

MapKit 中的中心位置在 UiLabel 中不可见