我的方法:
- (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;
}
然而,结果相当奇怪,backgroundColor
和textAlignment
未被应用。
这是一个以编程方式创建的UITableView。我该怎么办?
更新:解决了背景颜色问题。仍然难以居中。
答案 0 :(得分:0)
if (nil == cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:cellIdentifier];
}
NSTextAlignment对样式UITableViewCellStyleValue1和UITableViewCellStyleDefault不起作用。
因此,如果您需要在单元格中对齐textLabel,请使用UITableViewCellStyleValue2。
希望它有所帮助!!!
答案 1 :(得分:0)
建议:我建议您不要以编程方式进行此对齐,而是根据您的要求创建包含背景图像和所有其他控件的nib文件的自定义单元格。如果您需要更改UI,这将在将来帮助您。在xib文件中,您也可以直接设置文本对齐方式。
答案 2 :(得分:0)
试试这种方式..
首先设置单元格的框架
- (void)layoutSubviews
{
CGRect textLabelFrame = self.textLabel.frame;
[super layoutSubviews]
textLabelFrame.size.width=250.0f;
self.textLabel.frame = textLabelFrame;
}
然后我认为它适用于中心对齐。
如果您有任何问题,请与我们联系。
答案 3 :(得分:0)
通过将<{1}}更改为
中的UITableViewCellStyleValue1
,找到了居中问题的解决方案
UITableViewCellStyleDefault
答案 4 :(得分: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的建议。