自动布局dynamic调整uilabel宽度

所以我在Storyboard中并排了两个UILabel。 第二个标签应该与第一个标签的右边缘alignment(拖尾限制为1),但是我也需要第一个标签(左边的标签)将它的宽度设置为与内容大小相等,除非它达到最大宽度。 视觉:


|标签一个文本| |标签两个文本|


我需要以下约束:

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

2)标签2应该总是贴在标签1的右边

如何在Storyboard中设置?

  1. 在标签之间创build1个水平label2 :按住Control键从label2拖动到label1 。 从popup窗口中select“水平间距”。 双击约束。 将常数更改为1。
  2. label1一个最大宽度:selectlabel1 。 转到顶部菜单栏,select编辑器>引脚>宽度。 双击约束。 将关系更改为<=并将常数更改为最大宽度。
  3. 垂直alignment标签:select两个标签。 转到顶部菜单栏,select编辑器>alignment>垂直中心。
  4. 您仍然需要设置约束条件来定义标签在容器视图中的位置。 我把这个留给你。 我从根视图的左边缘固定label1 32个点,从顶部布局导向点固定34个点。
  5. 更新标签的框架,以反映上述限制:转到canvas右下angular的菜单栏。 点击“解决自动布局问题”的领带button。 在popup窗口中select“更新所有框架…”。

注:请注意,我不必创build约束来使label1的宽度反映其内容大小。 内容大小限制是自动生成的。

在这里输入图像说明

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

使用xib自动布局根据文本设置UIlabel和UIButton灵活宽度

请先用下面的代码获取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]; 

那么第二个标签Frame将会是:

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