我刚刚开始接触 iOS 开发,所以我希望我能在这里获得正确的详细信息......
我有一个UILabel
,加载到通过 .xib 创建的表格单元格中。实际上有几个标签,其中之一的长度不同(因此包装高度也不同)。heightForRowAtIndexPath
等被正确覆盖,并且两个标签所需的高度都被正确计算并分配给每个标签.frame
设置完两个尺寸后,我将较小(固定长度,始终为一行高)标签的frame.origin.y 设置为与较大标签相匹配。就单步执行来看,这是有效的cellForRowAtIndexPath
但在新创建的单元格的初始显示中,原点似乎在容器中并不完全垂直居中,而不是固定在顶部。
单击“穿过”单元格到不同的视图,并返回到(现在已重用,并且可能已经正确大小的容器)后,位置设置如前,并且出现在我期望的位置。
It seems就像之后容器被调整大小一样cellForRowAtIndexPath
返回,并且在某个地方为我们的标签找到了一个新位置;这可以解释为什么稍后重复使用该单元可以解决问题。
我已经尝试了内部和外部模式和基线设置、拉伸设置等的所有明显合理的组合。不知道解释和/或解决方法。
Update:
一个关于更改自定义 UITableViewCell 中自定义 UIButton 的位置 https://stackoverflow.com/questions/8352530/changing-the-position-of-custom-uibutton-in-custom-uitableviewcell问题解决了问题。解决方案是子类化UITableViewCell
并覆盖layoutSubviews
,从而有机会在 TableView 完成正常定位后重新定位子元素。一旦该人在这里做出回应,或者赏金到期,我将用代码回答自己,将关闭此窗口。
如果我在 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 );
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)