-1

我的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    NSInteger row = indexPath.row;

    if (nil == cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
    }

    // Setup row background image (a.k.a the set image)
    NSString *setID = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"id"];
    NSString *setImageName = [@"s-" stringByAppendingString:setID];
    UIImage *setImage = [UIImage imageNamed:setImageName];

    cell.backgroundView = [[UIImageView alloc] initWithImage:setImage];
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:setImage];

    NSString *setName = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"name"];
    cell.textLabel.text = [setName uppercaseString];
    cell.textLabel.font = [UIFont fontWithName:@"OpenSans" size:20];
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.backgroundColor = [UIColor redColor];    // Not working?
    cell.textLabel.textAlignment = NSTextAlignmentCenter;   // Not working?

    return cell;
}

然而,结果相当奇怪,其中backgroundColortextAlignment没有得到应用。

嗯!

这是一个以编程方式创建的 UITableView。我该怎么办?

更新:背景颜色问题已解决。仍然难倒居中。

4

5 回答 5

0
 if (nil == cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:cellIdentifier];
}

NSTextAlignment 不适用于样式 UITableViewCellStyleValue1 和 UITableViewCellStyleDefault 。

因此,如果您需要对齐单元格中的 textLabel ,请使用 UITableViewCellStyleValue2 。

希望能帮助到你!!!

于 2013-10-09T04:54:51.197 回答
0

建议:我建议您不要以编程方式进行此对齐,而是根据您的要求创建一个包含背景图像和所有其他控件的 nib 文件的自定义单元格。如果您需要更改 UI,这将对您有所帮助。在 xib 文件中,您也可以直接设置文本对齐方式。

于 2013-10-09T05:17:08.403 回答
0

试试这个方法。。

首先为单元格设置框架

- (void)layoutSubviews
{
    CGRect textLabelFrame = self.textLabel.frame;
    [super layoutSubviews]

    textLabelFrame.size.width=250.0f;
    self.textLabel.frame = textLabelFrame;
}

然后我认为它适用于中心对齐。

如果您有任何问题,请告诉我。

于 2013-10-09T05:38:43.120 回答
0

UITableViewCellStyleValue1通过更改为UITableViewCellStyleDefaultin找到了居中问题的解决方案

    if (nil == cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
    }
于 2013-10-09T08:22:44.977 回答
0

我建议将您自己的添加UILabel为子视图,并仅使用它而不是从不使用cell.textLabel。这样您就可以完全控制(没有任何干扰)文本对齐和视图框架。

例子:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    NSInteger row = indexPath.row;

    if (nil == cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];

        /* 
         * Make the label cover the entire bounds of the cell, no matter how the cell resizes
         * (Old school autoresizing still works because it gets translated into constraints)
         */
        UILabel *label = [[UILabel alloc] initWithFrame:cell.contentView.bounds];
        label.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

        /*
         * No need to set this stuff repeatedly, let's just do it
         * once on creation of the label
         */
        label.font = [UIFont fontWithName:@"OpenSans" size:20];
        label.textColor = [UIColor whiteColor];
        label.backgroundColor = [UIColor redColor];    // Should work now
        label.textAlignment = NSTextAlignmentCenter;   // Should work now

        // Set a tag so we can find this label later
        label.tag = 42;
    }

    // Setup row background image (a.k.a the set image)
    NSString *setID = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"id"];
    NSString *setImageName = [@"s-" stringByAppendingString:setID];
    UIImage *setImage = [UIImage imageNamed:setImageName];

    cell.backgroundView = [[UIImageView alloc] initWithImage:setImage];
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:setImage];

    NSString *setName = [[self.wallpaperCollectionArray objectAtIndex:row] valueForKey:@"name"];

    // Find our custom UILabel and configure it
    UILabel *label = (id)[self.contentView viewWithTag:42];
    label.text = [setName uppercaseString];

    return cell;
}

更好的是,改用 UITableViewCell 子类。它使您的代码更有条理。在这种情况下,您可以使用@user1673099 的建议。

于 2014-12-25T00:35:13.357 回答