gpt4 book ai didi

Swift: Storyboard 中的可重用 UIView 和大小限制

转载 作者:搜寻专家 更新时间:2023-10-30 22:04:44 26 4
gpt4 key购买 nike

我正在尝试在 Swift 中创建一个可重用的 UIView,我可以将它插入到我的 Storyboard View Controller 中。我现在的关键问题是可重用的 UIView“小部件”不完全适合 Storyboard 中的 UIView 框。我关注了this tutorial设置可重用的 UIView 小部件

  1. 创建了 UIView 的子类和相应的 .xib - 并连接了这些:

    import UIKit

    class MyWidgetView: UIView {

    @IBOutlet var view: UIView!;

    required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder);

    NSBundle.mainBundle().loadNibNamed("MyWidgetView", owner: self, options: nil);
    self.addSubview(self.view);
    }

    }
  2. 在上面代码对应的接口(interface)文件XIB中,我在Simulated Metrics下使用了Freeform size的UIView,在View模式下使用了Scale to Fill。

  3. 在主 Storyboard中,我添加了一个 UIView block (相同的矩形)并将类更改为 MyWidgetView

  4. 虽然我在 XIB 和主 Storyboard 中都使用了布局约束,但我在 XIB 中创建的组件在实际应用中看起来被压扁了。

请看截图。粉红色部分不应该出现,因为它只是我为测试大小而添加的主 Storyboard上 UIVIew 的一种颜色。那个 UIView 实际上是 MyWidgetView(在我在第 3 步中更改类之后。所以理论上,由于 MyWidgetView == 主 Storyboard上的 UIView,并且 UIView 具有使其在 super View 中成为矩形的约束,那么为什么我的小部件被压扁了?下面的蓝色部分应该一直向右延伸。Squished widget

最佳答案

从代码中的 nib 文件加载的实际 View 层次结构是通过添加的self.addSubview(self.view)。因此,您的 self.view 的框架实际上与其父级没有关系,即 MyWidgetView

您可以选择通过代码添加布局约束,或者在添加为 subview 后仅设置其框架。就个人而言,我更喜欢后者。在我的实验中,以下是对我有用的。我正在使用 Xcode 6.4,我认为它与您的不同。

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

if let nibsView = NSBundle.mainBundle().loadNibNamed("MyWidgetView", owner: self, options: nil) as? [UIView] {
let nibRoot = nibsView[0]
self.addSubview(nibRoot)
nibRoot.frame = self.bounds
}
}

关于Swift: Storyboard 中的可重用 UIView 和大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32061599/

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