动态调整UILabel的大小,但不起作用。
我试图根据文本中的文本重新调整大小(或者我允许ie108的最大宽度),并在它旁边放置一个按钮,下面的代码实际上在调试时给出满意的结果,但标签的宽度不是相应地改变。 是否有任何特殊设置可以在xib或其他任何东西中做请帮助Iam。动态调整UILabel的大小,但不起作用。
NSDictionary *[email protected]{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文件的快照。
更新:而不是使用locFeedcell.lbl_location.bounds.origin.x+width
使用locFeedcell.lbl_location.frame.origin.x+width
。 bounds.origin.x
始终为0
。
也许在您的.xib
文件中启用了自动布局功能?检查实用程序窗格中的文件检查器选项卡。 如果这没有帮助,您可以在设置它们之前和之后发布帧的值吗?请记住标签和按钮的内存地址,并在布置完所有内容后再次打印相应的框架。
快速提示: 您可以使用CGRectGetMaxX(locFeedcell.lbl_location.frame)
而不是locFeedcell.lbl_location.bounds.origin.x+width
来获得框架的右边缘。
尝试以下;
[locFeedcell.lbl_location setFrame:newLabelframe];
[locFeedcell.btn_map setFrame:newButtonFrame];
这相当于'locFeedcell.lbl_location.frame = newLabelframe; locFeedcell.btn_map.frame = newButtonFrame;' – Tobi
我在代码中看不到任何逻辑问题。有两件事你可能会检查:
- 将最大宽度更改为两倍或更宽,使更改更明显,因此可以更容易验证;
- 确保在UI框架中设置新框架时处于UI线程中。
它实际上经过我验证,我说我通过调试点验证了它。 –
如何使用Autolayout约束?
你有3个对象:
- 是最近在 - >让我们把它lbl_recentlyAt
- lbl_location
- btn_map
您将需要3个约束:
- 设置你最近添加标签的固定位置:
| -X- [lbl_recentlyAt]
- 设置位置标签和按钮的位置变化,让我们用20p空间表示
[lbl_recentlyAt] -20- [lbl_loc通货膨胀] -20- [btn_map]
您可能需要拨打您的手机的setNeedsLayout方法时lbl_location宽度的变化来更新布局:https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instm/UIView/setNeedsLayout
[cellView setNeedsLayout]
希望这有助于!
自动布局确实有帮助,但我试图用简单的方法做到这一点...使用自动layot对我来说是一件复杂的事情......但是对于知识分享来说,thnkyou ** @ adepablor **。它可能会帮助我在未来的某个地方。 –
欢迎您使用任何您认为更容易的方法。但我的建议是,现在或在可预见的将来,仔细阅读我发布的自动布局链接。它会花费你不到一个小时,你会发现它并不那么复杂!另外,您可以在故事板中添加约束条件,这意味着更少的代码,这意味着更少的错误,这太棒了! :) – adepablor
//用这个自定义字体
CGFloat的宽度= [label.text sizeWithFont:[UIFont fontWithName:@ “ChaparralPro粗体” 尺寸:40]。宽度;
//用这个系统字体
CGFloat的宽度= [label.text sizeWithFont:[UIFont systemFontOfSize:40]。宽度;
label.frame = CGRectMake(point.x,point.y,width,height);
//point.x,point.y - > origin for label;
// height - >您的标签高度;
大小与字体已弃用先生,我有什么用途是相同的.. –
是自动布局已启用,不知道这一点。谢谢,这是一个巨大的帮助。并且还提供了小费。 –