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 有 0 填充
UILabel 位置在 UITableviewcell 内没有改变