在我的应用程序中,我有多个自定义单元格的表视图。单元格中的一些文本分布在2-4行之间,因此标签的高度足以容纳内容。
然而,在iPad上,屏幕较大,我希望文本显示在标签的左上角,而不是中间,就像使用numberOfLines
属性时一样。我知道你可以水平对齐文本,但是必须可以将文本对齐到左上角吗?或者是不可能的。
截图:
答案 0 :(得分:20)
不可能垂直对齐 UILabel 中的文字。但是,您可以使用 NSString 的 sizeWithFont:方法动态更改标签的高度,并设置其 x 和 y < / em>如你所愿。
作为替代方案,您可以使用 UITextField 。它支持 contentVerticalAlignment peoperty,因为它是 UIControl 的子类。您必须将 userInteractionEnabled 设置为 NO ,以防止用户在其上键入文字。
答案 1 :(得分:3)
我实际上注意到使用
[Blue setSizeToFit]
垂直对齐顶部。默认为居中。
答案 2 :(得分:3)
sizeToFit
在UITableCellView
中不起作用,因为在滚动过程中会重复使用单元格。
解决方案是根据字体和字体大小计算表格单元格高度,并调整标签高度。
由于在网上找到解决方案非常困难,我写了一篇关于它的short post
答案 3 :(得分:3)
您可以按照以下方式执行此操作
从IB
numberOfLines
属性0
将您的标签lineBreakMode
设为UILineBreakModeWordWrap
(非常非常重要)
现在无论你在标签上设置什么,只需要附加几个@“\ n”就可以了...... 离.-
[yourTextLabel setText:@"myLabel\n\n\n\n\n"];
答案 4 :(得分:3)
在iOS 7 sizeWithFont:
现已弃用!
像子类UILabel
这样的几个解决方案必须进行调整。
我对顶部对齐标签文字的解决方案:
在子类TopVerticalAlignmentLabel : UILabel
中覆盖drawRect:
,如下所示:
- (void)drawRect:(CGRect)rect
{
CGRect labelStringRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{ NSFontAttributeName: self.font, /* further attributes */}
context:nil];
[super drawTextInRect:CGRectMake(0, 0, self.frame.size.width, labelStringRect.size.height)];
}
答案 5 :(得分:2)
我添加了viewDidLoad
self.textLabel.numberOfLines = 0;
[self.textLabel sizeToFit];
确保您的约束设置正确,以便允许标签缩小或增长。否则它将无法工作。
答案 6 :(得分:1)
以下是SomeOne提出的同一问题。你会找到更合适的方法来解决这个问题。他们对此做了很好的解释。
我想是的,你应该看看这个。
在该帖子中,许多答案建议在text
的基础上为UILabel设置动态帧,如下所述的代码片段。
CGSize theStringSize = [textToBeUsed sizeWithFont:lblTitle.font constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode];
lblTitle.frame = CGRectMake(lblTitle.frame.origin.x, lblTitle.frame.origin.y, theStringSize.width, theStringSize.height);
lblTitle.text = theText;
// lblTitle is the Label used for showing the Text.
您可以获得更精确的想法,而不是使用textField
here it is
答案 7 :(得分:0)
您可以简单地使用UITextView,并将其UserInteraction设置为No,并且您的所有问题都将得到解决!