我目前正在使用self.frame
初始化我的UITableViewCell的backgroundView框架。这似乎适用于设备方向更改(单元格背景填充整个单元格,看起来很好等)。 什么是更好的框架(如果有的话)?
编辑#1 :我还使用CGRectZero
初始化了backgroundView作为框架。这似乎没有区别(UITableViewCells和backgroundViews功能在所有界面方向都很好)。
我还测试了设置backgroundView的autoresizingMask
属性。这没有任何区别。 我想了解backgroundViews初始框架会影响什么(如果有的话)。
答案 0 :(得分:1)
假设您正在尝试将UIImageView添加为backgroundView,并且您正尝试调整该imageView的大小,请按以下方式进行操作:
似乎无法改变UITableViewCell.backgroundView的框架(或者至少不是Apple推荐的东西,因此文档中没有提到它)。要使用自定义大小的UIImageView,例如使用可调整大小的UIImage,作为UITableViewCell中的背景,我执行以下操作:
1)创建一个UIImageView并将其image属性设置为您希望的图像。
2)使用addSubview:消息将UIImageView添加为UITableViewCell的子视图。
3)使用sendSubviewToBack:message将UIImageView发送到后面。
这会将您的UIImageView置于任何其他添加的子视图后面,您现在可以操纵“背景视图”的框架。 (又名imageview)。
要确保imageview符合tableViewCell的框架,请在计算图像视图的高度时使用cell.frame的高度和宽度属性。
答案 1 :(得分:0)
如果您开发自定义表格视图单元格,解决方案是在layoutSubviews方法中调整框架。这是我的一个项目的自定义UITableViewCell,我需要从左边10点边距:
#import "TETopicCell.h"
#import "UIColor+Utils.h"
@implementation TETopicCell
@synthesize topicTitleLabel = _topicTitleLabel;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"theme_btn_yellow"]];
bgImageView.contentMode = UIViewContentModeTopLeft;
bgImageView.frame = CGRectMake(0.0f, 0.0f, 239.0f, 42.0f);
self.backgroundView = bgImageView;
_topicTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(46.0f, 0.0f, 206.0f, 42.0f)];
_topicTitleLabel.backgroundColor = [UIColor clearColor];
_topicTitleLabel.textColor = [UIColor colorWithR:116 G:74 B:1];
[self.contentView addSubview:_topicTitleLabel];
}
return self;
}
- (void)layoutSubviews
{
[super layoutSubviews];
// update frame here
self.backgroundView.frame = CGRectOffset(self.backgroundView.frame, 10.0f, 0.0f);
// and here
if (self.selectedBackgroundView){
self.selectedBackgroundView.frame = CGRectOffset(self.selectedBackgroundView.frame, 10.0f, 0.0f);
}
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
if (selected) {
UIImageView *selectedImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"theme_btn_red"]];
selectedImageView.contentMode = UIViewContentModeTopLeft;
selectedImageView.frame = CGRectMake(0.0f, 0.0f, 239.0f, 42.0f);
self.selectedBackgroundView = selectedImageView;
[_topicTitleLabel setTextColor:[UIColor colorWithR:255 G:211 B:211]];
}
else {
self.selectedBackgroundView = nil;
[_topicTitleLabel setTextColor:[UIColor colorWithR:116 G:74 B:1]];
}
}
@end