ios – systemLayoutSizeFittingSize:在UILabel上的行为不像预期的那样

ios – systemLayoutSizeFittingSize:在UILabel上的行为不像预期的那样,第1张

概述我发现了systemLayoutSizeFittingSize:方法的不同行为,然后我预料到了. 这是一个快速Playground的代码,它演示了行为,但它在Objective-C中是相同的: import UIKitimport Foundationvar label = UILabel()label.text = "This is a Test Label Text"label. 我发现了systemLayoutSizefittingSize:方法的不同行为,然后我预料到了.

这是一个快速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上的行为不像预期的那样所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1113882.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存