iOS7 UItableViewCell在样式分组的表格视图中显示

iOS7 UItableViewCell在样式分组的表格视图中显示,ios7,Ios7,在iOS7中,分组表格视图的单元格显示为表格视图的全宽,更像是普通表格视图样式。但在模拟器的设置应用程序中,分组样式看起来不同。实现这种类型的单元格有什么帮助吗?此“全宽”是iOS7的默认值,来自苹果的转换guid: 每组扩展屏幕的全宽 对于设置,并非所有苹果的控件都是标准的,您需要自己做一些调整,可能会为表格单元格设置背景 小建议:现在不要弄乱表格或单元格的设计,在人们习惯之前继续使用该标准。此解决方案适用于iOS 7以及以前版本的iOS 创建自定义UITableView单元类并重写UITab

在iOS7中,分组表格视图的单元格显示为表格视图的全宽,更像是普通表格视图样式。但在模拟器的设置应用程序中,分组样式看起来不同。实现这种类型的单元格有什么帮助吗?

此“全宽”是iOS7的默认值,来自苹果的转换guid:

每组扩展屏幕的全宽

对于设置,并非所有苹果的控件都是标准的,您需要自己做一些调整,可能会为表格单元格设置背景

小建议:现在不要弄乱表格或单元格的设计,在人们习惯之前继续使用该标准。

此解决方案适用于iOS 7以及以前版本的iOS

创建自定义UITableView单元类并重写UITableViewCell。在setFrame中,您可以调整所需的单元格大小。setFrame和setAlpha都在tableView:willDisplayCell:forRowAtIndexPath:之后调用,因此任何附件视图和图像视图都能正确显示

参考资料:

在cellForRowAtIndexPath中,将UITableViewCell替换为CustomTableViewCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:@"CustomTableViewCell" forIndexPath:indexPath];

...

}
在故事板文件中,将原型单元类设置为CustomTableViewCell,并将其作为标识符设置为“CustomTableViewCell”


您可以使用自定义表格单元格类和覆盖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

我认为插图应该是10.0f,而不是20.0f(ios 6,分组tableview的宽度是300px;ios 7,它的全宽是320px)。因此(320-300)/2=10.0f
@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