
这是一个快速Playground的代码,它演示了行为,但它在Objective-C中是相同的:
import UIKitimport Foundationvar label = UILabel()label.text = "This is a Test Label Text"label.numberOflines = 0label.Font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)label.preferredMaxLayoutWIDth = 40let layoutSize = label.systemLayoutSizefittingSize(UILayoutFittingCompressedSize)let intrinsicSize = label.intrinsicContentSize()
我原以为layoutSize和intrinsicSize是一样的.
但在这种情况下,layoutSize是(w 173,h 20)而intrinsicSize是(w 40,h 104)
我希望两者都是intrinsicSize但似乎systemLayoutSizefittingSize:忽略preferredMaxLayoutWIDth
有人能够向我解释一下吗?
编辑:
也
label.setNeedsLayout()label.layoutIfNeeded() let layoutSize = label.systemLayoutSizefittingSize(UILayoutFittingCompressedSize)let intrinsicSize = label.intrinsicContentSize()
不会改变结果
解决方法 内在大小是内容视图的计算,您可以在示例中获得预期结果.另一方面,layoutSize取决于视图的约束,因为您没有定义任何系统使用不使用内在大小的默认系统.但是如果你使用为标签添加一些约束,即在视图中居中垂直和水平,那么系统将使用内在内容大小来最终确定布局,并且两个大小将是相同的.objective-c中的代码示例:
//This code assume you have a UILabel as IBOutlet named testLabel with two constrains// to center the vIEw,then in "vIEwDIDLoad:"self.testLabel.text =@"This is a Test Label Text";self.testLabel.Font = [UIFont preferredFontForTextStyle:(UIFontTextStyleBody)];self.testLabel.numberOflines = 0;self.testLabel.preferredMaxLayoutWIDth = 40;CGSize layoutSize1 = [_testLabel systemLayoutSizefittingSize:UILayoutFittingCompressedSize];CGSize intrinsicSize1 = [_testLabel intrinsicContentSize];NSLog(@"\nlayout:%@\nintrinsicSize:%@",NsstringFromCGSize(layoutSize1),NsstringFromCGSize(intrinsicSize1));
对于这种情况,输出是:
2015-01-29 01:00:46.265 test[31327:911898] layout: {38.5,130.5} intrinsicSize:{38.5,130.5} 总结 以上是内存溢出为你收集整理的ios – systemLayoutSizeFittingSize:在UILabel上的行为不像预期的那样全部内容,希望文章能够帮你解决ios – systemLayoutSizeFittingSize:在UILabel上的行为不像预期的那样所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)