在xib自定义视图中使用Scrollview以适应多种宽度

时间:2018-09-22 19:54:22

标签: ios swift uiview uiscrollview xib

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

Content View hierarchy

尽管“内容视图”为自由格式,但我将宽度设置为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定制类名称设置为上面相同的定制UIView文件。然后,我通过添加UIView将其实现到Main.storyboard中,正确设置约束,并为其提供与File’s Owner相同的自定义类名称

运行iPhone 8时,一切都很完美,但切换到较小的设备(如iPhone 5s)时,我注意到我的滚动视图现在具有水平滚动了。与更大的屏幕设备(如iPhone 8+)iPhone 5s相比,我的滚动视图现在稍微偏向右侧。

Notice the labels does not align with the clock which is center on iP8+ anymore 请注意,标签不再与iP8 +上的时钟对齐

因此,我尝试删除了滚动视图,并且所有设备之间的一切正常。因此,从这些角度出发,我认为滚动视图必须弄乱我的自定义视图。然后,我进行了一些自我研究,并发现了这些主题。

How to update constraints after adding UIView from xib on UIScrollView in swift?

ScrollView Add SubView in swift 3

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

1 个答案:

答案 0 :(得分:0)

今天刚解决,感觉很好

  1. 删除上述所有步骤,只需将IBOutlet保留在自定义UIView文件中
  2. 删除function from(number){ return (number+26)/4; } 自定义类名称,并将File’s Owner自定义类名称替换为自定义UIView
  3. 将UIView添加到您的Content View中,我的情况是ScrollView。添加所有必需的约束(duh)
  4. Main.storyboard这样的ScrollView添加IBOutlet
  5. 导航到您的View Controller文件
  6. 带有@IBOutlet weak var scrollView: UIScrollView!的{​​{1}}是您的xib文件,let alohaView = Bundle.main.loadNibNamed("Feature", owner: self, options: nil)?.first as? FeatureView是您的自定义UIView文件控件,用于xib文件
  7. 添加Feature,注意我对500高度进行了硬编码,将在此高度上工作
  8. FeatureView
  9. alohaView?.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 500)将自定义视图添加回滚动视图