ios - 带有动态内容的 IOS Stackview 自动布局问题
问题描述
我正在尝试在我的项目中使用 UIStackView 和动态内容。stackview 被固定到容器视图的前导和尾随。为什么我把它钉住了?因为 Xcode 否则会抱怨我必须指定宽度或 X 位置。但也许这不是正确的方法 - 让我知道。堆栈视图当前配置为:
- 对齐:中心(我也尝试过“填充”)
- 分布:等间距
无论如何,stackview 本身的内容是从一个 XIB 文件创建的,该文件被扩展为一个自定义 UIView。这种作品,但我在布局上有几个问题:
当堆栈视图中只有少数项目时,它们是稀疏分布的。理想情况下,我希望 UIView(带有绿色区域的橙色按钮)尽可能大地调整大小以填补这些空白
当 stackview 中有很多项目时,它们当前堆叠在一起。这是一个问题。应将单个 UIView 调整为最大尺寸,使其水平适合 UIStackview。
我为将 UIView(s) 添加到 stackview 所做的工作如下:
labelStackView.arrangedSubviews.forEach { (view) in
view.removeFromSuperview()
}
for (index, character) in model.modelName.enumerated() {
// CharacterPlaceholder extends UIView
let characterPlaceHolder = CharacterPlaceholder()
...
labelStackView.addArrangedSubview(characterPlaceHolder)
}
而 CharacterPlaceholder 大致如下所示
class CharacterPlaceholder: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
customInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
customInit()
}
private func customInit(){
let nib = UINib(nibName: "CharacterPlaceholder", bundle: nil)
if let view = nib.instantiate(withOwner: self, options: nil).first as? UIView {
addSubview(view)
view.frame = self.bounds
}
}
我已将项目上传到我的 github 帐户: https ://github.com/alexwibowo/Flipcard
知道我做错了什么吗?我应该在开始时(或在屏幕旋转期间)获取屏幕尺寸,然后手动计算按钮所需的宽度吗?这似乎很痛苦并且非常手动。我希望我可以在这里使用一些自动布局魔法。
预先感谢您的帮助!
编辑:我认为我需要使用“平均填充”进行分配,以便各个字母块具有相同的大小。而且,这样它们就被限制在可用的 stackview 空间中。但是,现在它们仍然可以重叠。
解决方案
好的..我想出了一个方法来做到这一点。首先,正如我所提到的,我需要将分布设置为“平均填充”,以便堆栈视图中的每个视图的大小都相同。但仅仅这样做是不够的。我需要获取屏幕尺寸。即通过
view.frame.width
然后,当我展开 xib 文件时,我需要使用简单的数学手动调整它的大小。例如:
let viewWidth = view.frame.width
let numberOfCharacters = model.modelName.count
let widthOfEach = Int(viewWidth) / numberOfCharacters
然后是调整大小部分:
characterPlaceHolder.widthConstraint.constant = widthOfEachIncludingMargin
那个 widthConstraint 是我在 characterPlaceHolder 视图上设置的一个出口。
推荐阅读
- c++ - 使用 MSVC 在 Windows 上编译错误 Botan 库
- r - 使用 ggplot 组合条形图和折线图
- botframework - 如何在具有最小化功能的网站上添加现有机器人
- pytorch - 如何在 pytorch 网站上理解这一点?
- selenium - Cucumber 依赖问题 - 无法加载插件类
- php - 如何在 Linux Ubuntu /opt/lampp/etc/php.ini 中增加 max_input_vars
- .net - 如何在后面的代码中将 xaml 资源值设置为常量
- reactjs - React-Select 自定义输入失去焦点
- javascript - 如何使用 vanilla JS 在 CSS 中确定元素的高度或宽度是否设置为 100% 或“自动”?
- javascript - 如何将图像文件转换为灰度并将其保存在 react-native 中?