自动布局以动态调整uilabel宽度

时间:2013-12-27 09:55:09

标签: ios storyboard constraints autolayout

所以我在Storyboard中并排了两个UILabels。第二个标签应该与第一个标签的右边缘对齐(尾随约束为1),但是我还需要第一个标签(左边的标签)来设置它的宽度等于它的内容大小,除非它达到最大宽度。目测:


|标记一个文本| |标记两个文本|


我需要以下约束:

1)标签1应该宽度调整宽度,除非它达到最大尺寸。

2)标签2应始终与标签1的右边缘对接

如何在故事板中进行设置?

3 个答案:

答案 0 :(得分:108)

  1. 在标签之间创建1点水平空格:按住Ctrl键并拖动label2label1。从弹出窗口中选择“水平间距”。双击约束。将常量更改为1。
  2. label1最大宽度:选择label1。转到顶部菜单栏,选择编辑器> Pin>宽度。双击约束。将关系更改为< =并将常量更改为最大宽度。
  3. 垂直对齐标签:选择两个标签。转到顶部菜单栏,选择编辑器>对齐>垂直中心。
  4. 您仍需要设置约束,以定义标签在容器视图中的定位方式。我把它留给你。我从根视图的左边缘固定了label1 32个点,从顶部布局指南固定了34个点。
  5. 更新标签的框架,使其反映上述限制:转到画布右下角的菜单栏。点击“解决自动布局问题”Tie-Fighter按钮。在弹出窗口中选择“更新所有帧...”。
  6. 注意:请注意,我没有必要创建约束来使label1的宽度反映其内容大小。内容大小限制是自动生成的。

    enter image description here

答案 1 :(得分:6)

请参考以下约束来设置UIlabel和UIButton灵活宽度;

Set UIlabel and UIButton flexible width according to text using xib autolayout

答案 2 :(得分:1)

请先使用以下代码获取textSize:

    CGSize  textSize = { 230.0, 10000.0 };

    CGSize size = [[NSString stringWithFormat:@"%@", yourLabelText] 
                   sizeWithFont:[UIFont systemFontOfSize:10]
                   constrainedToSize:textSize
                   lineBreakMode:NSLineBreakByWordWrapping]; 

然后使用此内容大小设置您的第一个标签框架:

   UILabel *lblFirst = [[UILabel alloc] initWithFrame:CGRectMake(X, Y, W, size.height)];
   lblFirst.lineBreakMode = YES;
   lblFirst.lineBreakMode = NSLineBreakByWordWrapping;
   lblFirst.numberOfLines =size.height;
   lblFirst.backgroundColor = [UIColor clearColor];
   [self.view addSubview:lblFirst];

然后第二个标签框架将是:

 UILabel *lblFirst = [[UILabel alloc] 
 initWithFrame:CGRectMake(lblFollowerName.frame.size.width + lblFollowerName.frame.origin.x, Y, W, H)];