ios - 水平 UIStackView :值 999 或 1000 在水平内容压缩阻力中是否有任何特殊含义?
问题描述
我在水平堆栈视图中有以下 3 个组件。
- 黄色的
UILabel
- 红色的
UIImageView
- 绿
UIImageView
水平堆栈视图的分布是Fill。
的内容模式UIImageView
是Aspect fit。他们使用名为“pin.fill”的 SFSymbol。
for的行数UILabel
为0,因此它支持多行。
所有 3 个组件都具有相同的内容拥抱优先级 (250) 和内容压缩阻力优先级 (750)
当 UILabel 的水平内容抗压强度为 750 到 998 时
我的问题是
- 为什么红色
UIImage
占用大部分空间,即使它们都具有相同的内容拥抱优先级 (250) 和内容压缩阻力优先级 (750)? - 我的意图是让黄色
UILabel
填满大部分空间。但是,我只能做到这一点,如果我将水平内容压缩阻力(UILabel
仅限)提高到 999 或 1000。我想,只要任何值高于 750 就足够了?水平抗压强度中的999或1000值有什么特殊含义吗?
当 UILabel 的水平内容抗压强度为 999 或 1000 时
请注意,即使 UILabel 的水平内容压缩阻力为 999 或 1000,red 和 greenUIImageView
的宽度都会被压缩。但是,它们以不同的强度压缩,最终 2UIImageView
的宽度略有不同。为什么?
p/s
完整的项目代码位于https://github.com/yccheok/stackoverflow/tree/master/66444344/test
解决方案
你有点想多了。
您要做的是告诉两个图像视图“拥抱”它们的内容,并将其他所有内容保留为默认的拥抱和压缩阻力值。
所以,标签属性:
两个“pin”图像视图:
它在您的 Storyboard 中将如下所示:
试试这个代码......将标签连接到@IBOutlet
并运行应用程序。每次点击都会循环播放标签的 4 个不同长度的字符串:
class ViewController: UIViewController {
@IBOutlet var label: UILabel!
let strs: [String] = [
"Very Short",
"A little longer, but still one line.",
"Button - You can set the title, image, and other appearance properties of a button.",
"UIStackView - creates and manages the constraints necessary to create horizontal or vertical stacks of views. It will dynamically add and remove its constraints to react to views being removed or added to its stack. With customization it can also react and influence the layout around it.",
]
var idx: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
label.text = strs[idx % strs.count]
// tap anywhere in the view
let t = UITapGestureRecognizer(target: self, action: #selector(gotTap(_:)))
view.addGestureRecognizer(t)
}
@objc func gotTap(_ g: UITapGestureRecognizer) -> Void {
idx += 1
label.text = strs[idx % strs.count]
}
}
结果将是:
推荐阅读
- python - 相对导入问题
- spring-boot - 具有自定义过滤器困难的 Spring Boot WebMvcTest
- android - Android NDK 尝试使用 sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/ 构建,但 gnu-libstdc++ 不存在
- angular - 边缘浏览器问题: (url) 0 角度中的未知错误的 http 失败响应
- mysql - 如何修复外键级联删除/更新在 mysql 中超过 15 的最大深度
- python - Python多处理:跨进程增加共享变量的值
- kubernetes - 出站连接 15 秒后 Istio envoy 504 网关超时
- docker - 使用 tor\socks 对特定 http 的代理请求
- r - 如何跨多列收集/重塑不完整的数据框
- c# - 如何使用组织电子邮件发送电子邮件