如何左右对齐UITableCell上的标签

时间:2013-08-22 09:18:24

标签: iphone ios objective-c uitableview

我需要像这个截图一样的表格布局

我正在使用UIStoryboard和ARC

enter image description here屏幕:1

但我得到这样的

enter image description here屏幕:2

滚动表后,它变得像第一个屏幕一样,但最初就像屏幕2一样。

我在cellForRowAtIndexPath方法中的代码是

    UILabel *titleLabel = (UILabel *) [cell viewWithTag:1];
titleLabel.backgroundColor  =[UIColor whiteColor];

if (indexPath.row % 2) {
    NSLog(@"Odd Cell");
    [titleLabel setFrame:CGRectMake(100.0f, 10.0f, 200.0f, 20.0f)];
} else {
    NSLog(@"Even Cell");
    [titleLabel setFrame:CGRectMake(20.0f, 10.0f, 200.0f, 20.0f)];
}

titleLabel是通过IB在单元格上的标签,标签为:1

我必须相应地设置标签的框架,然后在其中设置文本而不是文本对齐。

这就是为什么我设置titleLabel.backgroundColor =[UIColor whiteColor];

5 个答案:

答案 0 :(得分:1)

试试这个......它的工作

- (int)numberOfSectionsInTableView:(UITableView *) tableView {
    return 1;
}

- (int) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section {
    return 20;
}

-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell;

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MainCell"];

    UILabel *titleLabel = (UILabel *) [cell viewWithTag:1];
    titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 30)];

    CGRect labelPosition;
    if ((indexPath.row+1) % 2) {
        NSLog(@"Odd Cell");

        titleLabel.text = [NSString stringWithFormat:@"Odd Cell - %d", (indexPath.row+1)];
        titleLabel.backgroundColor = [UIColor redColor];
    } else {
        NSLog(@"Even Cell");
        labelPosition = titleLabel.frame;
        labelPosition.origin.x = 110;
        titleLabel.frame = labelPosition;
        titleLabel.text = [NSString stringWithFormat:@"Even Cell - %d", (indexPath.row+1)];
        titleLabel.backgroundColor = [UIColor blueColor];
    }
    titleLabel.textColor = [UIColor whiteColor];

    [cell addSubview:titleLabel];

    return cell;

}

Download test project

答案 1 :(得分:1)

我用一个简单的基本想法实现了这一点,其代码是

    UILabel *leftTitleLabel = (UILabel *) [cell viewWithTag:1];
leftTitleLabel.backgroundColor  =[UIColor whiteColor];

UILabel *rightTitleLabel = (UILabel *) [cell viewWithTag:2];
rightTitleLabel.backgroundColor  =[UIColor whiteColor];


if (indexPath.row % 2) {
    leftTitleLabel.hidden = YES;
    rightTitleLabel.hidden = NO;
    rightTitleLabel.text = @"Right Cell";
} else {
    rightTitleLabel.hidden = YES;
    leftTitleLabel.hidden = NO;
    leftTitleLabel.text = @"Left Cell";
}

现在,所需位置的单元格上有2个标签,并设置标签1 n 2。

答案 2 :(得分:0)

使用此:cell.textLabel.textAlignment = ALIGN_CENTER;&

#ifdef __IPHONE_6_0
#define ALIGN_CENTER NSTextAlignmentCenter
#else
#define ALIGN_CENTER UITextAlignmentCenter
#endif

答案 3 :(得分:0)

在cellForRowAtIndexPath方法

    UILabel *titleLabel = (UILabel *) [cell viewWithTag:1];
titleLabel.backgroundColor  =[UIColor whiteColor];

if (indexPath.row % 2) {
    NSLog(@"Odd Cell");
    titleLabel.textAlignment = NSTextAlignmentRight;
} else {
    NSLog(@"Even Cell");
    titleLabel.textAlignment = NSTextAlignmentLeft; 
}

答案 4 :(得分:0)

您可以创建自定义单元格。并重新实现layoutSubview功能。像这样的东西

@synthesize padding;
-(void)layoutSubview {
    [super layoutSubview];

    [self.titleLabel setFrame:CGRectMake(padding, 10.0f, 200.0f, 20.0f)];
}

和cellForRowAtIndexPath函数:

if (indexPath.row % 2) {
    NSLog(@"Odd Cell");
    [cell setPadding:100.f];
} else {
    NSLog(@"Even Cell");
    [cell setPadding:20.f];
}