gpt4 book ai didi

swift - 即使设置了约束,UIView 也会被裁掉

转载 作者:搜寻专家 更新时间:2023-11-01 07:28:09 25 4
gpt4 key购买 nike

我在 xib 文件中创建了一个自定义 View ,我在其中将所有模拟指标设置为“推断”

在我看来,我通过固定左侧和顶部将一个堆栈 View x float 到左侧,并通过固定右侧和顶部将堆栈 View float 到右侧。有点像这样(= 符号表示屏幕边框)

==========
=x y=
= =
= =
= =
= =
==========

我没有对宽度和高度设置任何限制,因为一切都应该是推断出来的。 xib Constraints

我的 View 对应的类很简单:

class MyView: UIView {

var view:UIView!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

view = UIView.loadFromNibNamed("MyView")
addSubview(view)
}
}
extension UIView {

class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIView? {
return UINib(
nibName: nibNamed,
bundle: bundle
).instantiateWithOwner(nil, options: nil)[0] as? UIView
}

}

我通过将其固定到左侧、右侧、顶部和底部来在 Storyboard中使用此 View 。 UIView in storyboard .

问题是 View 是从 Nib 加载的,但是宽度在某种程度上不是动态的。我希望 View 根据父级的大小调整自身大小。但是,即使我设置了约束,右侧堆栈 View 的大约 1/3 被裁剪掉并且在屏幕上不可见。

我该怎么做才能解决这个问题?

最佳答案

如果您希望从 XIB 加载的任何 View 具有动态帧大小,则需要将 translatesAutoresizingMaskIntoConstraints 属性设置为 false。否则系统会自动创建布局约束,例如固定宽度和固定高度,以防止您的 View 调整大小。

此外,在将 View 添加到 View 层次结构后,您需要在代码中添加一些约束,将其顶部、底部、左侧和右侧边缘固定到其父 View 的相应边缘。毕竟,您将 XIB 的内容作为 subview 添加到您的自定义 View MyView 即这两个 View 不相同,您需要告诉系统它应该如何定位 subview (您的约束添加到你的 Storyboard只涉及到你的 MyView 实例,而不是它的 subview )。添加到您的代码中应该可以解决问题:

class MyView: UIView {

var view:UIView!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

view = UIView.loadFromNibNamed("MyView")
view.translatesAutoresizingMaskIntoConstraints = false
addSubview(view)

// Pin view to all four edges of its superview
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: [], metrics: nil, views: ["view": view]))
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: [], metrics: nil, views: ["view": view]))

}
}

边注:

  • 阅读 official documentation 中关于 translatesAutoresizingMaskIntoConstraints 属性的更详细解释.
  • Interface Builder 中“模拟指标”部分中的所有设置仅适用于 Interface Builder 本身。当您在模拟器或真实设备上运行应用时,它们不会对您的应用产生任何影响。

关于swift - 即使设置了约束,UIView 也会被裁掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34497223/

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