您好我是ios的新手,在我的应用中,我创建了一个UITableView
,我为UITableViewcell
设置了背景图片,但图片没有像屏幕下方那样填满整个屏幕宽度。为什么会出现这个问题?
我的意思是UITableViewCell
左右两侧的间隙即将到来的图像没有填满整个单元格宽度。
请帮助我一个人
#import "TableViewController.h"
@interface TableViewController ()
{
UITableView * tableList;
TableCell * Cell;
}
@end
@implementation TableViewController
- (void)viewDidLoad {
[super viewDidLoad];
tableList = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height) style:UITableViewStylePlain];
tableList.delegate = self;
tableList.dataSource = self;
tableList.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:tableList];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"MyCell";
Cell = (TableCell *)[tableList dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (Cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
Cell = [nib objectAtIndex:0];
}
//UIImageView *imageBackground = [[UIImageView alloc] init];
if (indexPath.row == 0) {
Cell.backGroundImage.image = [UIImage imageNamed:@"cell_top.png"];
} else if (indexPath.row == 9) {
Cell.backGroundImage.image = [UIImage imageNamed:@"cell_bottom.png"];
} else {
Cell.backGroundImage.image = [UIImage imageNamed:@"cell_middle.png"];
}
//imageBackground.contentMode = UIViewContentModeScaleToFill;
//Cell.backgroundView = imageBackground;
return Cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 44.0;
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
@end
答案 0 :(得分:1)
尝试设置单元格的layoutMargins属性,并将UITableView
设置为UIEdgeInsetsZero
。
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
tableList.layoutMargins = UIEdgeInsetsZero;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[...]
Cell.layoutMargins = UIEdgeInsetsZero;
return Cell;
}
同时检查contentMode
的{{1}}。
UIImageview
答案 1 :(得分:0)
尝试在left = 0
上设置contentInsetself.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
答案 2 :(得分:0)
使用调试视图层次结构来确定UITableView,UITableViewCell或UIImage没有填满整个屏幕宽度
http://www.raywenderlich.com/98356/view-debugging-in-xcode-6
答案 3 :(得分:0)
请在故事板中查看“TableCell”。您是否为自定义单元格选择了自定义插入选项?
答案 4 :(得分:0)
您希望在故事板中执行此操作,而不是使用代码设置表格视图。然后,您将要使用自动布局将约束从表视图连接到视图控制器的视图。有很多教程可以教你如何做到这一点。从长远来看,学习这将使事情变得更加容易。
将tableList
媒体资源的名称更改为tableView
。这对其他开发人员(包括将来自己)更有意义,因为它是什么(UITableView
实例)。
您的单元格名为Cell
,大写字母为C,但您不想使用大写字母命名属性。此外,它不需要像使用它一样成为类属性。将其从@interface
部分删除。
删除-numberOfSectionsInTableView:
方法。默认值为1,因此您不需要代码来返回默认值。
而不是-dequeueReusableCellWithIdentifier:
,请使用-dequeueReusableCellWithIdentifier:forIndexPath:
。然后你不需要通过测试来跟踪它,看看是否有一个单元格被返回(它总是会被返回)。您需要使用-registerNib:forCellReuseIdentifier:
注册您的笔尖。或者更好的是,只需在故事板中进行设计即可。
您的自定义表格视图单元格似乎有一个名为UIImageView
的{{1}}。这应该作为子视图添加到单元格的backGroundImage
属性(您需要创建 - 视图,而不是属性,它已经是backgroundView
的一部分)。设置图片视图UITableViewCell
,以便使用autoresizingMask
调整大小:
backgroundView
删除- (void)awakeFromNib
{
[super awakeFromNib];
self.backgroundView = [[UIView alloc] initWithFrame:self.bounds];
self.backGroundImage.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.backGroundImage.frame = self.backgroundView.bounds;
[self.backgroundView addSubview:self.backGroundImage];
}
方法。如果返回不同的值,则只想使用此值。默认行高为44.0,因此您无需执行任何其他操作。