首页 > 解决方案 > 子视图在情节提要上的大小计算错误

问题描述

我有以下问题:

在此处输入图像描述

这只发生在某些屏幕尺寸上。此视图位于链接到此处列出的单独文件的 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
    }

}

我已经确认情节提要上的约束是完全正确的(并且不会导致视图宽度的这种错误计算)。这个视图是从另一个视图控制器子类化的,如下所示:

我在哪里可以查看导致这种情况的原因?(再次,我相当肯定这不是限制)。我试着用谷歌搜索,但找不到任何似乎可以解释它的东西。任何帮助是极大的赞赏。

在此处输入图像描述

标签: swiftxcodeautolayout

解决方案


你是说

    view.frame = self.bounds

在我们还不知道是什么self.bounds的时候。然后约束开始起作用,self.bounds变化的界限也随之而来。但框架view.frame没有。

一个简单的解决方案是让您view能够在更改时调整自身大小self.bounds

    view.frame = self.bounds
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

或者你可以等到layoutSubviews设置view.frame


推荐阅读