【问题标题】:@IBDesignable UIView with fixed height@IBDesignable UIView 固定高度
【发布时间】:2025-12-29 05:55:11
【问题描述】:

我有一个自定义控件(xib + UIView 子类)。

我希望我的控件具有计算高度,例如 UITextField 或 ProgressBar,因此我希望 IB 不在每一侧向我显示 UIView 调整大小旋钮,而仅在我的自定义控件的左侧和右侧显示。 在 UITextField 属性检查器中的高度字段是重影,因此您无法从 Interface Builder 修改它。

我搜索了 *,找到了这个 Make a fixed size UIView, like UISwitch (using IBDesignable),但这不是我想要实现的目标。

感谢您的帮助, 卢卡-

【问题讨论】:

  • AFAIK,Apple 没有公开禁用 IB 中可设计视图的大小调整句柄/值的方法。 (甚至像 UISwitch 这样的控件也允许 IB 添加约束来更改大小,因此它并不像看起来那样“固定”。)顺便说一句,除了按照其他问题中的建议设置 intrinsicContentSize 之外,您可能还想将contentHuggingPrioritycontentCompressionResistancePriority 设置为1000。但所做的只是确保 IB 在应用自动布局时使用您的尺寸,如果您没有定义其他约束来覆盖它。

标签: ios swift uiview interface-builder custom-controls


【解决方案1】:

我相信您希望在右侧实用程序面板中禁用尺寸检查器中的高度,仅用于您的自定义控件,例如分段控件和固定高度文本字段。到目前为止,这是不可能的。使用 IBInspectable,您将只能在 Attribute Inspector 中显示您的变量。另一个选项是每次加载时在代码中调整控件的大小。

【讨论】:

  • 好的,谢谢您的回复。有没有办法在每次从 Interface Builder 更改自定义控件大小时将其重置为计算的宽度/高度?
【解决方案2】:

实现您想要的一种方法是使用Auto Layout 在视图上添加高度和宽度约束。您可以将IBOutlet 添加到 Interface Builder 中的约束,以防您需要在运行时对其进行操作。

【讨论】:

  • 你的意思是对我的自定义控制器主视图的约束吗?我可能是错的,但在我看来,我无法通过 Interface Builder 添加任何约束(引脚/大小约束是幻影的)。我添加了一个子 UIView 并向其添加了约束(高度和顶部/底部/前导/尾随约束),但是 Interface Builder 提供了所有旋钮来调整我的控制器的大小。无论如何,如果我将自定义控制器设置为错误的高度(高度!= 约束),Xcode 会抱怨告诉我 AutoLayout 约束存在冲突。
  • ViewController 没有尺寸(高度和宽度)。只有意见。一个 ViewController,一般来说,会显示一整屏信息,并且会占据整个屏幕。例外情况是,当视图控制器是视图控制器层次结构的一部分时,父级构造子级......包括 UINavigationController、UISplitViewController 或 UIPageController 之类的东西。因此,您通常不负责设置视图控制器的根视图的大小。我想我不明白你想要达到什么效果。
  • 抱歉,我写的是“自定义控制器”,而我的意思是“自定义控件”,这是一个带有一些 UIKit 元素(基本上是一个 UITextField 和 2 个标签)的 UIView 子类。