提问人: 提问时间:1/14/2014 更新时间:1/15/2014 访问量:655
动态调整 UILabel 的大小,但它不起作用。
Dynamically resizing a UILabel, but its not working.
问:
我正在尝试根据其中的文本(或我允许的最大宽度,即 108)调整标签大小,并在其旁边放置一个按钮,下面的代码实际上在调试时给出了令人满意的结果,但标签的宽度没有相应地改变。 在xib中是否有任何特殊设置或其他任何事情,请帮助Iam。
NSDictionary *attrib=@{NSFontAttributeName:locFeedcell.lbl_location.font};
CGFloat width=[locFeedcell.lbl_location.text sizeWithAttributes:attrib].width;
CGRect newLabelframe=locFeedcell.lbl_location.frame;
CGRect newButtonFrame=locFeedcell.btn_map.frame;
if (width>=108.00f) {
newLabelframe.size.width=108.00;
} else {
newLabelframe.size.width=width;
newButtonFrame.origin.x=locFeedcell.lbl_location.bounds.origin.x+width+4.00;
}
locFeedcell.lbl_location.frame=newLabelframe;
locFeedcell.btn_map.frame=newButtonFrame;
这是XIB文件的快照。
答:
我在您的代码中没有看到任何逻辑问题。您可以检查两件事:
- 将最大宽度更改为两倍或更宽,以使更改明显,以便于验证;
- 在将新框架设置为 UI 元素时,请确保您处于 UI 线程中。
评论
使用自动布局约束怎么样?
您有 3 个对象:
- 最近在 --> 让我们称之为 lbl_recentlyAt
- lbl_location
- btn_map
您将需要 3 个约束:
- 设置最近添加标签的固定位置:
|-X-[lbl_recentlyAt]
- 设置位置标签和按钮的可变位置,假设使用 20p 空间
[lbl_recentlyAt]-20-[lbl_location]-20-[btn_map]
当lbl_location宽度更改时,您可能需要调用单元格的 setNeedsLayout 方法来更新布局: https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instm/UIView/setNeedsLayout
[cellView setNeedsLayout]
希望这有帮助!
评论
更新:而不是使用 use . 总是 .locFeedcell.lbl_location.bounds.origin.x+width
locFeedcell.lbl_location.frame.origin.x+width
bounds.origin.x
0
也许您的文件中启用了自动布局?检查实用程序窗格中的文件检查器选项卡。
如果这没有帮助,您可以在设置框架之前和之后发布它们的值吗?记住标签和按钮的内存地址,并在所有布局完成后再次打印它们的框架。.xib
快速提示:
您可以使用 instead 而不是从框架中获取正确的边缘。CGRectGetMaxX(locFeedcell.lbl_location.frame)
locFeedcell.lbl_location.bounds.origin.x+width
评论
将其用于自定义字体
CGFloat width = [label.text sizeWithFont:[UIFont fontWithName:@“ChaparralPro-Bold” size:40 ]].width;
将其用于系统字体
CGFloat 宽度 = [label.text sizeWithFont:[UIFont systemFontOfSize:40 ]].width;
label.frame = CGRectMake(point.x, point.y, width,height);
point.x, point.y -> 标签的原点;
height ->标签高度;
评论