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

时间:2018-01-30 19:00:15

标签: swift xcode uiview storyboard xib

我在其中创建了一个带有UIView的xib文件。我在故事板中使用此视图,并希望根据其中的内容调整大小。当我在故事板中显式设置视图的高度时,它与XIB文件的高度相同。每个手机屏幕似乎也具有相同的xib高度和宽度,这使得视图离开屏幕,无论我将约束设置在故事板内。

我试过这个来隐藏视图并将横幅的高度设置为35

self.specialistBanner.pillView.isHidden = true  
specialistBannerHeight.constant = 35

我试过了

specialistBannerHeight.constant = 35

让故事板中的视图更小

我也试过

self.specialistBanner.sizeToFit()

无济于事

专业横幅广告视图的XIB文件 XIB File for the specialist banner view

xib文件中的标签 Label inside the xib file

xib中的药丸视图 Pill View within the xib

使用视图控制器内部的xib视图的Storyboard文件 Storyboard file using the xib view inside of a view controller

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
}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:4)

我有同样的问题。我在另一个问题中找到了答案。 您必须在自定义视图中覆盖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
}