xib 自定义视图中的滚动视图以适应多种宽度

Scrollview in xib custom view to fit with multiple width

目前,我正在通过 Content View 大小设置为 Freeform 的 xib 实现自定义视图。这是我的内容视图层次结构

虽然Content View是Freeform,但是我把宽度设置为375,和iPhone一样宽 8.然后我创建一个自定义的UIView文件

override init(frame: CGRect) {
    super.init(frame: frame)
    commonInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    commonInit()
}

private func commonInit() {
    Bundle.main.loadNibNamed("DetailsWeather", owner: self, options: nil)
    addSubview(contentView)
    contentView.frame = self.bounds
    contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]

}

之后,我将 xib File’s Owner 自定义 class 名称设置为上面相同的自定义 UIView 文件。然后我通过添加一个 UIView 将它实现到 Main.storyboard 中,正确设置约束并给它自定义 class 与 File’s Owner

相同的名称

当 运行 iPhone 8 时,一切都很完美,但切换到 iPhone 5s 等较小的设备时,我注意到我的滚动视图现在有水平滚动。对比 iPhone 5s,更大的屏幕设备,如 iPhone 8+,我的滚动视图现在向右侧丢失了一点。

请注意标签不再与 iP8+ 中心的时钟对齐

所以我尝试删除滚动视图,并且在所有设备上一切正常。所以从这些来看,我认为滚动视图一定搞砸了我的自定义视图。然后我做了一些自我研究并发现了这些主题。

ScrollView Add SubView in swift 3

我尝试了他们的解决方案并进行了修改以适应我的情况,但 none 似乎对我有用。所以我的问题是,有没有办法让 xib 文件的内容视图适合每个宽度?

今天刚解决,感觉很棒

  1. 去掉上面的所有步骤,只需要在自定义 UIView 文件中保留 IBOutlet
  2. 删除 File’s Owner 自定义 class 名称并将 Content View 自定义 class 名称替换为与您的自定义 UIView
  3. 相同的名称
  4. 将 UIView 添加到您的 Main.storyboard,我的例子是 ScrollView。添加所有必需的约束(duh)
  5. 像这样为 ScrollView 添加 IBOutlet @IBOutlet weak var scrollView: UIScrollView!
  6. 导航到您的视图控制器文件
  7. let alohaView = Bundle.main.loadNibNamed("Feature", owner: self, options: nil)?.first as? FeatureViewFeature 是你的 xib 文件,FeatureView 是你自定义的 UIView 文件控件,xib 文件
  8. 添加 alohaView?.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 500) 注意我对 500 高度进行了硬编码,将在这方面做更多工作
  9. scrollView.contentSize = CGSize(width: self.view.frame.size.width, height: (alohaView?.frame.size.height)!)
  10. scrollView.addSubview(alohaView!) 将自定义视图添加回滚动视图