在iOS7中,分组表视图的单元格显示为表格视图的整个宽度,更像是普通的表格视图样式。但是在模拟器的设置应用程序中,分组的样式看起来不同。可以帮助实现这种类型的单元格吗?
答案 0 :(得分:14)
此解决方案适用于iOS7以及之前版本的iOS。
创建自定义UITableView单元类并覆盖UITableViewCell。在setFrame中,您可以调整所需的单元格大小。 setFrame和setAlpha都在tableView之后调用:willDisplayCell:forRowAtIndexPath:所以任何附件视图和图像视图都能正确显示。
@interface CustomTableViewCell : UITableViewCell
@end
@implementation CustomTableViewCell
-(void) setFrame:(CGRect)frame
{
float inset = 20.0f;
frame.origin.x += inset;
frame.size.width -= 2 * inset;
[super setFrame:frame];
}
@end
在cellForRowAtIndexPath中,用CustomTableViewCell替换UITableViewCell。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomTableViewCell" forIndexPath:indexPath];
...
}
在您的故事板文件中,将Prototype单元类设置为 CustomTableViewCell ,它是“CustomTableViewCell”的标识符
答案 1 :(得分:3)
这个'全宽'是iOS7的默认值,来自Apple的Transition guid:
每组扩展屏幕的整个宽度。
对于设置,没有必要所有苹果'控件看起来很标准,你需要自己做一些调整,也许把表格单元格放在背景中。
小建议:暂时不要弄乱桌子和电池设计,并继续使用标准,直到人们习惯它为止。
答案 2 :(得分:0)
您可以使用自定义表格单元格类并覆盖setFrame:从表格视图的边缘拉取表格视图单元格。下面的示例代码。
这个答案是基于Aumansoftware的答案(谢谢!我会将此作为评论添加,但不足以代表)。该答案的问题在于它依赖于从头开始设置框架的调用代码,而不是进行相对更改。这通常是正确的,但如果调用者反复修改现有帧则不会。这具有在每次呼叫时水平缩小帧的副作用。事实证明,这正是在桌面行上使用拖放时会发生的事情!所以这个版本只是从父视图中拉出边缘。
@interface MyTableViewCell : UITableViewCell
/**
* Pixel inset off left and right sides.
*/
@property (nonatomic, assign) CGFloat sideInset;
@end
@implementation MyTableViewCell
- (void) setFrame:(CGRect)frame {
if (self.superview) {
CGFloat parentWidth = self.superview.frame.size.width;
if (frame.size.width > (parentWidth - 2.0 * self.sideInset)) {
frame.origin.x = self.sideInset;
frame.size.width = parentWidth - (2.0f * self.sideInset);
}
} else {
frame.origin.x = self.sideInset;
frame.size.width = frame.size.width - (2.0f * self.sideInset);
}
[super setFrame:frame];
}
@end