自定义 UIControl(滑块)在与交互之前不遵守约束

Posted

技术标签:

【中文标题】自定义 UIControl(滑块)在与交互之前不遵守约束【英文标题】:Custom UIControl (slider) does not abide by constraints until interacted with 【发布时间】:2015-08-02 15:51:45 【问题描述】:

我按照this tutorial 构建了一个自定义滑块,它是UIControl 的子类。当控件以编程方式插入到视图中时,它的效果很好,具有确切的大小、位置等。

但是,我想使用 Storyboard 在视觉上对齐视图的组件,因此我将 @IBDesignable@IBInspectable 添加到自定义滑块类中。这是我的问题:

    在 Storyboard 中,我添加了自定义滑块,并为“Trailing Space to superview”和“Leading Space to superview”添加了约束。 但是,当我在我的设备上运行它时,最初它不遵守上面设置的约束,直到我与滑块交互(触摸按钮)并突然强制执行约束。 我尝试在init (coder: NSCoder) 方法中调用setNeedsDisplay,但没有任何效果。

有谁知道为什么会发生这种情况以及我该如何解决?

【问题讨论】:

【参考方案1】:

init 中调用setNeedsDisplay 显然为时过早。尝试viewWillAppear 并尝试在控制器的view 上调用layoutSubviews

当然,潜在的错误是情节提要中的错误配置。 (通过这个平台很难调试)。

【讨论】:

感谢您的提示。看起来诀窍是在我的自定义 UIControl 中覆盖 layoutSubviews,然后在那里调用 setNeedsDisplay 等。 @Mundi 你在哪里为自定义 UIControl 设置图层框架/边界? @PetrusTheron 你不应该。使用布局约束。

以上是关于自定义 UIControl(滑块)在与交互之前不遵守约束的主要内容,如果未能解决你的问题,请参考以下文章

在 UIControl 中覆盖 isEnabled 以仍然允许触摸

iOS 自定义控件

Octave uicontrol 按钮元素

自定义 UIButton 的边缘在与它交互后看起来像素化

Ag-Grid 在与下拉列表交互期间保持自定义过滤器打开

如果 UIControl 中的 SVG 图像,点击不起作用