将 views 的 clipsToBounds 属性设置为 NO 将允许视图在其自己的框架之外绘制。
在您的 UITableViewController 子类中:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do what you normally do here, if anything then add...
self.view.clipsToBounds = NO;
}
这样做有一个副作用,您将看到在 tableview 的底部或顶部创建完整的单元格,而不是它们部分滚动到视图中。要么将表格视图放入另一个将 clipsToBounds 设置为 YES 的视图中,要么将表格视图的边缘与屏幕的边缘对齐,或者让视图覆盖底部和顶部(就像 UIToolbar 和 UINavigationBar 通常那样)。
要让 UITableViewCell 的 selectedBackgroundView 扩展到表格视图的框架之外,请创建 UITableViewCell 的子类并覆盖 layoutSubviews 方法。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YQGyZ"]];
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CQXYh"]];
self.textLabel.backgroundColor = [UIColor clearColor];
self.detailTextLabel.backgroundColor = [UIColor clearColor];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
CGRect frame = self.selectedBackgroundView.frame;
frame.size.width += 13; // where 13 is the size of the arrow overhang from the same images
self.selectedBackgroundView.frame = frame;
// You can also change the location of the default labels (set their background colors to clear to see the background under them)
self.textLabel.frame = CGRectMake(70, 0, 148, 30);
self.detailTextLabel.frame = CGRectMake(70, 30, 148, 30);
}
祝你好运。