UIView没有从XIB文件Swift调整大小

Sul*_*eed 1 xcode storyboard xib uiview swift

我创建了一个带有UIView的xib文件。我正在情节提要中使用此视图,并希望根据其中的内容调整大小。当我在情节提要中明确设置视图的高度时,它与XIB文件的高度相同。每个电话屏幕似乎也具有相同的xib高度和宽度,这导致视图从屏幕上移开,无论我在情节提要中设置了什么约束。

我已经尝试过这样做以隐藏视图,并将横幅的高度设置为35

self.specialistBanner.pillView.isHidden = true  
specialistBannerHeight.constant = 35
Run Code Online (Sandbox Code Playgroud)

我试过了

specialistBannerHeight.constant = 35
Run Code Online (Sandbox Code Playgroud)

使故事板中的视图变小

我也尝试过

self.specialistBanner.sizeToFit()
Run Code Online (Sandbox Code Playgroud)

无济于事

XIB文件用于专家横幅视图 XIB文件用于专家横幅视图

xib文件中的标签 xib文件中的标签

胫骨内的药丸视图 胫骨内的药丸视图

使用视图控制器内部的xib视图的情节提要文件 使用视图控制器内部的xib视图的情节提要文件

class SpecialistBannerView: UIView {

@IBOutlet weak var bannerTitle: UILabel!
@IBOutlet weak var pillView: PillCollectionView!

var viewModel = SpecialistBannerViewModel()

// Initialize xib
let SpecialistBannerView = "SpecialistBannerView"

override func awakeFromNib() {
    super.awakeFromNib()
    self.translatesAutoresizingMaskIntoConstraints = false
}

override init(frame: CGRect) {
    super.init(frame: frame)
    initXib(view: self)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    initXib(view: self)
}

func initXib(view: SpecialistBannerView) {

    let viewToShow = Bundle.main.loadNibNamed(SpecialistBannerView, owner: self, options: nil)?[0] as? UIView ?? UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.sizeToFit()
    view.addSubview(viewToShow)
    view.frame = view.bounds
    view.pillView.setUp()
    view.sizeToFit()

    view.autoresizingMask = [.flexibleHeight, .flexibleWidth]

    viewModel.specialistBannerViewProtocol = self
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

小智 6

我有同样的问题。我在另一个问题中找到了答案。您必须在自定义视图中覆盖LayoutSubViews()并设置边界

override func layoutSubviews() {
    super.layoutSubviews()

    // we need to adjust the frame of the subview to no longer match the size used
    // in the XIB file BUT the actual frame we got assinged from the superview
    self.view.frame = self.bounds
}
Run Code Online (Sandbox Code Playgroud)

  • *我在另一个问题中找到了答案*-如果您在答案中链接该问题会更好。 (2认同)