【问题标题】:How to vertically center two UILabel with dynamic heights如何以动态高度垂直居中两个 UILabel
【发布时间】:2013-10-08 05:54:29
【问题描述】:

如何在视图中垂直居中两个 UILabel(动态高度),例如 Label1(2 行,截断)和 Label2(1 行,截断):

+------------------------------------------+
|                                          |
|                                          |
|Label1 Label1 Label1 Label1 Label1 Label1 |
|Label1 Label1 Label1 Label1 Label1 ...    |
|Label2 Label2 Label2 Label2 Label2 ...    |
|                                          |
|                                          |
+------------------------------------------|

我猜这对于单个 UILabel 和 NSAttributedString 是不可能的(截断 2 行的一部分,1 行的另一部分)。

【问题讨论】:

    标签: iphone ios objective-c ios7 core-text


    【解决方案1】:

    您可以让视图中的标签框出现并再次在屏幕上替换它们。我之前尝试过,它奏效了。你可能还需要调用 setNeedsDisplay。

    - (void)viewDidAppear:(BOOL)animated {
    
       float heights = lbl1.frame.size.height + lbl2.frame.size.height;
       lbl1.frame = CGRectMake( lbl1.frame.origin.x, screenheight/2 - heights/2, lbl1.frame.size.width, lbl1.frame.size.height );
       lbl2.frame = CGRectMake( lbl2.frame.origin.x, screenheight/2 - heights/2 + lbl1.frame.size.height, lbl2.frame.size.width, lbl2.frame.size.height );
      [lbl1 setNeedsDisplay];
      [lbl2 setNeedsDisplay];
    }
    

    【讨论】:

      【解决方案2】:

      如果您使用自动布局,您可以将两个标签嵌入到父 UIView 中,然后使用约束将父 UIView 在其父视图中垂直居中。

      【讨论】:

      • UILabel 都是多行且高度不是静态的,所以我认为你的解决方案不适用。
      • @keo,AutoLayout 专为这种情况而设计。当视图设置为使用其固有的内容大小时,它们将随着内容的变化而调整并导致重新计算布局。
      • @hasan 谢谢,但我认为 AutoLayout 是一个更好的解决方案。
      • 并使父视图动态展开;这可以通过将子视图的边缘刚性连接到父视图来实现。更多详情:stackoverflow.com/a/19194592/1586606
      猜你喜欢
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2015-08-05
      • 2017-12-09
      • 2013-03-01
      • 2014-02-01
      相关资源
      最近更新 更多