gpt4 book ai didi

xcode4 - 如何让 Interface Builder 在基于约束的布局中尊重自定义 View 的内在内容大小?

转载 作者:行者123 更新时间:2023-12-03 13:25:13 26 4
gpt4 key购买 nike

XCode 4.5 中的 Interface Builder 尊重某些 View 的 intrinsicContentSize,例如NSButton,但我无法说服它在我自己的自定义 subview 中尊重它。这会导致 IB 添加额外的约束,试图强制在 IB 中绘制布局,然后导致程序运行时不使用内在大小。

例如,考虑在窗口中居中的按钮,以及在窗口中居中的自定义 View ……

IB constraints for centered NSButton

IB constraints for centered NSView

可以看到自定义 View 有四个约束,大概是因为IB不知道 View 的intrinsicContentSize。您可以更改添加的额外约束,例如您可以强制它为宽度和高度,但不能删除它们。

我现在通过搜索和删除 awakeFromNib 中的额外约束来应对这个问题,但必须有更好的方法来做到这一点。

最佳答案

如何实际做到这一点,2019

import UIKit

@IBDesignable class TagPerson: ShadowRoundedImageView {

override var intrinsicContentSize: CGSize {
var s = super.intrinsicContentSize
s.height = 40
s.width = 40
return s
}

override func prepareForInterfaceBuilder() {
invalidateIntrinsicContentSize()
}

}

但是,有一个问题。 Xcode 有问题。您有时可以通过以下方式重置它:

上述内容当然会在运行时完美运行。但它随机无法在界面生成器中工作(即使是 11+)。

要使其循环,请尝试
  • 通常的“刷新所有 View ”
  • 将无意义的约束附加和删除到您的固有尺寸 View 之一。 (我注意到如果你有很多,这样做通常足以使 Xcode 循环,然后它们都可以工作。)
  • 最后:

  • Xcode 具有“固有大小占位符”功能。

    enter image description here

    选择一个或多个内在尺寸元素。来回切换奇怪的占位符几次。通常这会使其循环,然后 View 将正常工作。

    在最坏的情况下,使用通常的 clean-everything 重新启动 Xcode 有时会使其正常工作。

    关于xcode4 - 如何让 Interface Builder 在基于约束的布局中尊重自定义 View 的内在内容大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13727589/

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