在 iOS7 中,分组表视图的单元格显示为表视图的全宽,更像是普通的表视图样式。但在模拟器的设置应用程序中,分组样式看起来不同。对实施这种类型的细胞有什么帮助吗?
3 回答
此解决方案适用于 iOS7 以及以前的 iOS 版本。
创建一个自定义 UITableView 单元格类并覆盖 UITableViewCell。在 setFrame 中,您可以调整所需的单元格大小。setFrame 和 setAlpha 都在 tableView:willDisplayCell:forRowAtIndexPath: 之后调用,因此任何辅助视图和图像视图都可以正确显示。
参考:https ://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewDelegate_Protocol/#//apple_ref/occ/intfm/UITableViewDelegate/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 中,将 UITableViewCell 替换为 CustomTableViewCell。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomTableViewCell" forIndexPath:indexPath];
...
}
在您的故事板文件中,将您的原型单元类设置为CustomTableViewCell,并将其标识符设置为“CustomTableViewCell”
这个'全宽'是iOS7的默认值,来自Apple的Transition guid:
每组扩展屏幕的整个宽度。
对于设置,不必让所有苹果的控件看起来都是标准的,您需要自己进行一些调整,也许为表格单元格设置背景。
小建议:暂时不要弄乱表格或单元格设计,并继续使用标准,直到人们习惯为止。
您可以使用自定义表格单元类并覆盖 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