Swift 子视图在情节提要上的大小计算错误
我有以下问题: 这种情况仅在某些屏幕尺寸上发生。此视图位于链接到此处列出的单独文件的nib中:Swift 子视图在情节提要上的大小计算错误,swift,xcode,autolayout,Swift,Xcode,Autolayout,我有以下问题: 这种情况仅在某些屏幕尺寸上发生。此视图位于链接到此处列出的单独文件的nib中: import Foundation import UIKit class FooterActionView : UIView { @IBOutlet weak var actionButton: UIButton! let nibName = "FooterActionView" required init?(coder aDecoder: NSCoder) {
import Foundation
import UIKit
class FooterActionView : UIView {
@IBOutlet weak var actionButton: UIButton!
let nibName = "FooterActionView"
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit() {
guard let view = loadViewFromNib() else { return }
view.frame = self.bounds
self.addSubview(view)
}
func loadViewFromNib() -> UIView? {
let nib = UINib(nibName: nibName, bundle: nil)
return nib.instantiate(withOwner: self, options: nil).first as? UIView
}
}
我已经确认故事板上的约束是完全正确的(并且不会导致对视图宽度的错误计算)。
此视图是从另一个视图控制器子类化的,如下所示:
我到哪里去看看是什么引起的?(我再次相当肯定这不是限制因素)。我试着在谷歌上搜索,但找不到任何解释。非常感谢您的帮助
你是说
view.frame = self.bounds
在我们还不知道什么是self.bounds
的时候。然后约束开始生效,self.bounds
的边界发生变化。但是view.frame的框架没有
一个简单的解决方案是,当self.bounds
发生变化时,让您的视图能够调整自身大小:
view.frame = self.bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
或者您可以等到layoutSubviews
设置view.frame
那么什么时候调用该方法合适呢?我从一个关于UI组件子类化的在线教程中复制了这一点。layoutSubviews
是指视图遵守其约束并进行布局。或者使用自动调整大小,甚至自动布局,以便view.frame
始终是正确的大小。