gpt4 book ai didi

ios - 编程 slider 约束未更新

转载 作者:行者123 更新时间:2023-11-28 15:54:35 30 4
gpt4 key购买 nike

我一直在尝试学习如何以编程方式使用 slider 和按钮在 Storyboard中填充 View 。目前,我正在尝试让一个已编程的 slider 遵守已编程的 NSLayoutConstraint

这是我的代码:

let centerXConstraint =  NSLayoutConstraint(item: self.volumeSliderP, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.centerX, multiplier: 1.0, constant: 10.0)

self.view.addConstraint(centerXConstraint)

我应该提一下,当我用第一个 item 替换 View 中已经存在的 slider 时(它是通过 Storyboard 放置的,它自己的约束也放置在 IB/Storyboard 中),它使用上面的 NSLayoutConstraint 代码正确更新。此外,我已经能够使用自定义代码更新我编程的 volumeSliderP 以更改其句柄并将其成功旋转到垂直。

我缺少什么步骤来允许这个 NSLayoutConstraint 代码在我编程的 slider 上工作?

感谢您的帮助!

最佳答案

在代码中使用约束时,无论控件类型如何,您都需要做两件(也许三件)事情:

  • translatesAutoresizingMaskIntoConstraints 设置为 false。

如果不这样做将引发约束冲突,这将出现在控制台日志中。我通常为此创建 UIView 的扩展:

public func turnOffAutoResizing() {
self.translatesAutoresizingMaskIntoConstraints = false
for view in self.subviews as [UIView] {
view.translatesAutoresizingMaskIntoConstraints = false
}
}

然后在 viewDidLoad 中(添加我的 subview 之后)我只需添加一行:

view.turnOffAutoResizing()

如链接的 Apple 文档中所述,如果您有标签和文本字段,文本字段将扩展以适合标签,而无需设置宽度。 UISlider 没有固有宽度,但有固有高度。

  • 因此在您的情况下,您不仅需要设置位置,还需要定义宽度。

topleading 的组合足以让布局引擎知道“位置”和“高度”,但不知道“宽度”。如果您为 Y 因子(顶部、底部、中心 Y)定义了“centerX”和一些东西(您没有列出任何代码),情况也是如此。

如果我说得很清楚,你应该能够看到引擎会知道(在帧坐标中)“在 X/Y 开始 slider ,高度是 XX 点(它具有固有高度),但应该多长时间?”

我通常设置 top、leading 和 trailing... 或 top、centerX 和 width。但它因需要而异。

关于ios - 编程 slider 约束未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41945291/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com