Ano*_*ite 35 objective-c uilabel xcode4.5
[self.Review sizeToFit];
Run Code Online (Sandbox Code Playgroud)
sizeToFit之前的结果:
NSStringFromCGRect(self.Review.frame): {{90, 20}, {198, 63}}
Run Code Online (Sandbox Code Playgroud)
sizeToFit后的结果:
NSStringFromCGRect(self.Review.frame): {{90, 20}, {181, 45}}
Run Code Online (Sandbox Code Playgroud)
我希望宽度保持不变.我只是想改变身高.自动掩码是
(lldb) po self.Review
(UILabel *) $1 = 0x08bb0fe0 <UILabel: 0x8bb0fe0; frame = (90 20; 181 45); text = 'I'm at Mal Taman Anggrek ...'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+H; userInteractionEnabled = NO; layer = <CALayer: 0x8bb68b0>>
Run Code Online (Sandbox Code Playgroud)
我知道有一种方法可以这样做: 如何调整和使UILabel的宽度适合文本大小?
答案要么很奇怪(我们需要重新补给字体信息).或者不清楚.
您还需要定义最大宽度,并告诉程序如果sizeToFit为您提供的宽度大于该最大值,该如何操作.
我将使用奇怪的使用解决方案sizeWithFont.这很奇怪,因为UILabel已经知道标签中的字体了.
实际上sizeToFit究竟是如何表现的呢?它如何决定我们是否需要更薄或更高的UILabel?
Mun*_*ndi 41
这就是它的完成方式.因为标签已经包含了字体信息,所以在这种方法中包含它是微不足道的.
CGSize size = [label.text sizeWithFont:label.font
constrainedToSize:CGSizeMake(maxWidth, MAXFLOAT)
lineBreakMode:UILineBreakModeWordWrap];
CGRect labelFrame = label.frame;
labelFrame.size.height = size.height;
label.frame = labelFrame;
Run Code Online (Sandbox Code Playgroud)
使用更新的Swift版本boundingRectWithSize:
let maxHeight = CGFloat.infinity
let rect = label.attributedText?.boundingRectWithSize(CGSizeMake(maxWidth, maxHeight),
options: .UsesLineFragmentOrigin, context: nil)
var frame = label.frame
frame.size.height = rect.size.height
label.frame = frame
Run Code Online (Sandbox Code Playgroud)
vad*_*nov 40
您可以使用sizeThatFits获得相同的结果.
CGSize size = [label sizeThatFits:CGSizeMake(label.frame.size.width, CGFLOAT_MAX)];
CGRect frame = label.frame;
frame.size.height = size.height;
label.frame = frame;
Run Code Online (Sandbox Code Playgroud)
或者,使用sizeToFit.
CGRect frame = label.frame;
[label sizeToFit];
frame.size.height = label.frame.size.height;
label.frame = frame;
Run Code Online (Sandbox Code Playgroud)
chr*_*ith 17
sizeToFit效果很好.唯一的问题是它基于控件的当前大小.
例如,如果要使用标签回收表格视图单元格,则标签在前一个单元格中的宽度可能会减小,因此,对sizeToFit的调用可能看起来不可靠.
只需在发送sizeToFit消息之前重置控件的原始宽度.
Swift 3 对这个问题的简单扩展。
extension UILabel {
func sizeToFitHeight() {
let size: CGSize = self.sizeThatFits(CGSize.init(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude))
var frame:CGRect = self.frame
frame.size.height = size.height
self.frame = frame
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35408 次 |
| 最近记录: |