【问题标题】:Is it possible to vertically align text inside labels with a "large" frame是否可以将标签内的文本与“大”框架垂直对齐
【发布时间】:2011-07-02 13:06:14
【问题描述】:

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

但是在 iPad 上屏幕更大,我希望文本出现在标签的左上角,而不是像使用 numberOfLines 属性时那样出现在中间。我知道您可以水平对齐文本,但也必须可以将文本与左上角对齐?或者是不可能的。

截图:

【问题讨论】:

标签: iphone objective-c ios uitableview uilabel


【解决方案1】:

不可能垂直对齐UILabel中的文本。但是,您可以使用 NSStringsizeWithFont: 方法动态更改标签的高度,只需设置其 xy 随意。

您也可以使用 UITextField。它支持 contentVerticalAlignment 属性,因为它是 UIControl 的子类。您必须将其 userInteractionEnabled 设置为 NO 以防止用户在其上输入文本。

【讨论】:

  • 谢谢,uitextfield 会导致 tableviewcell 中的性能变差或其他问题,还是一样好?
  • @Andreas,是的。在表格视图单元格中使用 UITextField 很好。在我个人看来,使用 UILabels 并动态调整大小将是正确的方法。无论如何,由你来选择。两种方式都很好。 ;-)
  • 使用 UITextField 你在文本周围有那个丑陋的框架吗?
  • @Sharen Eayrs,您可以通过设置 textField.borderStyle = UITextBorderStyleNone 来防止这种情况发生。
【解决方案2】:

我实际上注意到使用

[Blue setSizeToFit]

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

【讨论】:

  • 它真正起作用的方式是它仍然居中对齐,但现在顶部保持不变,并且框只是“正确”,所以看起来它是对齐顶部。这符合大多数人的目的。但是,您可以将背景设置为某种颜色并验证您的结果。
  • 确保您的约束设置正确,以便标签可以缩小或扩大
【解决方案3】:

你可以这样做

  1. 从 IB 设置标签的 numberOfLines 属性 0

  2. 将标签的lineBreakMode 设置为UILineBreakModeWordWrap非常非常重要

现在,无论您在标签上设置什么,只需在其上附加几个 @"\n" ..... 例如-

[yourTextLabel setText:@"myLabel\n\n\n\n\n"];

【讨论】:

  • 如果你这样做,文本总是有省略号,不是吗?
【解决方案4】:

在 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】:

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

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

    因为在网上很难找到解决方案,所以我写了一个 short post 来讨论它

    【讨论】:

      【解决方案6】:

      我加了viewDidLoad

      self.textLabel.numberOfLines = 0;
      [self.textLabel sizeToFit];
      

      确保您的约束设置正确,以便标签可以缩小或扩大。否则它将无法正常工作。

      【讨论】:

        【解决方案7】:

        这是 SomeOne 提出的相同问题。你会找到更合适的方法来解决这个问题。他们对此做了很好的解释。

        我想是的,你应该看看这个。

        在该线程中,许多答案建议根据text 为 UILabel 设置动态框架,如下所述的代码 sn-p。

            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.
        

        你可以获得更精确的想法,而不是使用textFieldhere it is

        【讨论】:

          【解决方案8】:

          您可以简单地使用一个 UITextView ,并将其 UserInteraction Enabled 设置为 No,您的所有问题都将迎刃而解!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-08
            • 1970-01-01
            • 2013-05-02
            相关资源
            最近更新 更多