UItableviewcells与背景图像没有填满整个屏幕的宽度?

时间:2016-02-26 04:10:38

标签: ios objective-c uitableview

您好我是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

enter image description here

5 个答案:

答案 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

上设置contentInset
self.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部分删除。

Coding Guidelines for Cocoa

删除-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,因此您无需执行任何其他操作。