ios - systemLayoutSizeFitting(_:) 不遵守十进制数的宽度或高度限制
问题描述
let aView = UIView()
let width: CGFloat = 173.5
aView.widthAnchor.constraint(equalToConstant: width).isActive = true
print(aView.systemLayoutSizeFitting(CGSize(width: width, height: 0)))
输出(在 iOS 13.7 上,可能会影响其他版本):
(173.66666666666666, 0.0)
我发现使用0.33或0.66作为小数部分会使输出的错误稍微少一些,但仍然有不需要的重复数字,例如 173.33333333333334 为 0.33
我也为高度限制复制了这个。使用UIView.layoutFittingCompressedSize
as 大小也有相同的错误输出。
这是一个错误,还是我对自动布局一无所知?
解决方案
UIKit 不能在部分像素上绘制。
在具有@2x
屏幕比例的设备(例如 iPhone 11)上,您的结果将是:
(173.5, 0.0) // nearest half-of-a-point
在具有@3x
屏幕比例的设备上(例如 iPhone 11 Pro),您的结果将是:
(173.66666666666666, 0.0) // nearest third-of-a-point
请注意,如果您尝试:
let width: CGFloat = 173.25
你会得到:
(173.33333333333334, 0.0) // iPhone 11 Pro
(173.5, 0.0) // iPhone 11
推荐阅读
- smtp - 为什么在发送电子邮件 mikrotik 时出现身份验证错误?
- android - 如何修复 Kotlin JobCancellationException?
- javascript - Utilities.ComputeDigest() 的返回是一个字节数组吗?
- java - 如何为导航和当前活动设置 On back 选项
- firebase - 如何配置链接到 Firebase 托管的域,并维护邮件访问(DNS 记录)
- javascript - 发布产品详细信息数组
- python - 匹配 Elastic Search 中的整个语句
- angular - 如果使用不存在的事件名称,Angular 不会显示错误
- caldav - PHP add calendar event using CalDav
- android - 如何使用 expo 更新 React 本机 android 应用程序