子视图在 Storyboard 上的大小计算错误
Subview Has Size Miscalculated on Storyboard
我有以下问题:
这只发生在某些屏幕尺寸上。此视图位于链接到此处列出的单独文件的 nib 中:
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
的框架没有。
一个简单的解决方案是让您的 view
能够在 self.bounds
发生变化时自行调整大小:
view.frame = self.bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
或者您可以等到 layoutSubviews
设置 view.frame
。
我有以下问题:
这只发生在某些屏幕尺寸上。此视图位于链接到此处列出的单独文件的 nib 中:
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
的框架没有。
一个简单的解决方案是让您的 view
能够在 self.bounds
发生变化时自行调整大小:
view.frame = self.bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
或者您可以等到 layoutSubviews
设置 view.frame
。