自动布局dynamic调整uilabel宽度
所以我在Storyboard中并排了两个UILabel。 第二个标签应该与第一个标签的右边缘alignment(拖尾限制为1),但是我也需要第一个标签(左边的标签)将它的宽度设置为与内容大小相等,除非它达到最大宽度。 视觉:
|标签一个文本| |标签两个文本|
我需要以下约束:
1)标签应该调整宽度明智,除非它达到最大尺寸。
2)标签2应该总是贴在标签1的右边
如何在Storyboard中设置?
- 在标签之间创build1个水平
label2
:按住Control键从label2
拖动到label1
。 从popup窗口中select“水平间距”。 双击约束。 将常数更改为1。 - 给
label1
一个最大宽度:selectlabel1
。 转到顶部菜单栏,select编辑器>引脚>宽度。 双击约束。 将关系更改为<=并将常数更改为最大宽度。 - 垂直alignment标签:select两个标签。 转到顶部菜单栏,select编辑器>alignment>垂直中心。
- 您仍然需要设置约束条件来定义标签在容器视图中的位置。 我把这个留给你。 我从根视图的左边缘固定
label1
32个点,从顶部布局导向点固定34个点。 - 更新标签的框架,以反映上述限制:转到canvas右下angular的菜单栏。 点击“解决自动布局问题”的领带button。 在popup窗口中select“更新所有框架…”。
注:请注意,我不必创build约束来使label1
的宽度反映其内容大小。 内容大小限制是自动生成的。
请参考下面的约束来设置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)];