是否可以将标签内的文本与“大”框架垂直对齐

时间:2011-07-02 13:06:15

标签: iphone objective-c ios uitableview uilabel

在我的应用程序中,我有多个自定义单元格的表视图。单元格中的一些文本分布在2-4行之间,因此标签的高度足以容纳内容。

然而,在iPad上,屏幕较大,我希望文本显示在标签的左上角,而不是中间,就像使用numberOfLines属性时一样。我知道你可以水平对齐文本,但是必须可以将文本对齐到左上角吗?或者是不可能的。

截图:

enter image description here

8 个答案:

答案 0 :(得分:20)

不可能垂直对齐 UILabel 中的文字。但是,您可以使用 NSString sizeWithFont:方法动态更改标签的高度,并设置其 x y < / em>如你所愿。

作为替代方案,您可以使用 UITextField 。它支持 contentVerticalAlignment peoperty,因为它是 UIControl 的子类。您必须将 userInteractionEnabled 设置为 NO ,以防止用户在其上键入文字。

答案 1 :(得分:3)

我实际上注意到使用

[Blue setSizeToFit]

垂直对齐顶部。默认为居中。

答案 2 :(得分:3)

sizeToFitUITableCellView中不起作用,因为在滚动过程中会重复使用单元格。

解决方案是根据字体和字体大小计算表格单元格高度,并调整标签高度。

由于在网上找到解决方案非常困难,我写了一篇关于它的short post

答案 3 :(得分:3)

您可以按照以下方式执行此操作

  1. 从IB

  2. 设置标签的numberOfLines属性0
  3. 将您的标签lineBreakMode设为UILineBreakModeWordWrap非常非常重要

  4. 现在无论你在标签上设置什么,只需要附加几个@“\ 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,并且您的所有问题都将得到解决!