Dan*_*iel 8 iphone indentation uitableview
我已经将UITableViewCell子类化为创建一个带有按钮和2个标签的自定义单元格.使用Dave Mark的Beginning iPhone Development中概述的模式从xib加载单元定义.这是基本代码:
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MarketItemCustomCell" owner:self options:nil];
for (id oneObject in nib)
{
if ([oneObject isKindOfClass:[MarketItemCustomCell class]])
{
cell = (MarketItemCustomCell *)oneObject;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
标签和按钮按预期显示,但不遵守缩进级别.我已经实现了如下所示的indentationLevelForRowAtIndexPath,但是单元格仍然一直向左对齐.
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
<snip/>
return 5;
}
Run Code Online (Sandbox Code Playgroud)
请注意,当我不使用自定义单元格时,缩进级别正常工作.
任何提示?
Dan*_*iel 21
iOS 8更新:以下代码由于某种原因不再有效
iOS 8的替代建议:
考虑创建一个AutoLayout约束来表示缩进的左边距
在运行时,修改此约束以更改缩进级别
如果您有自定义的UITableViewCell子类,则此子类可以将IBOutlet映射到约束.(不幸的是Apple没有提供findConstraintByTag/Id功能)
可以修改NSLayoutConstraint的具有讽刺意义的"常量"属性来更改缩进级别.
对于iOS 7,这可行(但不应再推荐)
根据vodkhang的建议,我在UITableViewCell子类中实现了以下解决方案.不确定这是否是最好的解决方案,但似乎工作正常.
- (void)layoutSubviews
{
[super layoutSubviews];
float indentPoints = self.indentationLevel * self.indentationWidth;
self.contentView.frame = CGRectMake(indentPoints,
self.contentView.frame.origin.y,
self.contentView.frame.size.width - indentPoints,
self.contentView.frame.size.height);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6610 次 |
最近记录: |