具有动态宽度的UILabel - 水平对齐

时间:2012-10-15 13:26:22

标签: objective-c ios xcode uilabel

我在UITableView中的自定义单元格类中有一个UILabel,我使用以下代码来动态增加标签的宽度:

CGSize sizeToMakeLabel = [cell.cellResult.text sizeWithFont:cell.cellResult.font];

cell.cellResult.frame = CGRectMake(cell.cellResult.frame.origin.x, cell.cellResult.frame.origin.y, sizeToMakeLabel.width, sizeToMakeLabel.height);

使用上面的代码出现的问题是,我不能再将标签右对齐(将其宽度增加到左边而不是右边)。

如果我不使用上面的代码并在IB中将对齐设置为右边,则对齐有效。但在这种情况下,我失去了动态宽度。

我试过了:

cell.cellResult.textAlignment = UITextAlignmentRigth;
cell.cellResult.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;

但没有任何反应。

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:5)

您无法右对齐标签,因为您为其框架设置了实际宽度。

如果您希望它是动态的但是右对齐,您可以执行以下操作:

CGSize sizeToMakeLabel = [cell.cellResult.text sizeWithFont:cell.cellResult.font];

cell.cellResult.frame = CGRectMake(cell.cellResult.frame.origin.x + cell.cellResult.frame.size.width - sizeToMakeLabel.width, cell.cellResult.frame.origin.y, sizeToMakeLabel.width, sizeToMakeLabel.height);

答案 1 :(得分:3)

那是因为你在设置框架时更改了标签的来源:cell.cellResult.frame.origin.x,

您可以更改边界以仅管理宽度。

答案 2 :(得分:2)

您可以为标签设置框架,如:

[self.lblTitle setFrame: CGRectMake(self.lblTitle.frame.origin.x,
                                    self.lblTitle.frame.origin.y,
                                    [self.lblTitle.text sizeWithAttributes:
                                     @{NSFontAttributeName:
                                           self.lblTitle.font}].width,
                                    self.lblTitle.frame.size.height
                                    )];

它会起作用