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 文件的内容视图适合每个宽度?
今天刚解决,感觉很棒
- 去掉上面的所有步骤,只需要在自定义 UIView 文件中保留 IBOutlet
- 删除
File’s Owner
自定义 class 名称并将 Content View
自定义 class 名称替换为与您的自定义 UIView 相同的名称
- 将 UIView 添加到您的
Main.storyboard
,我的例子是 ScrollView。添加所有必需的约束(duh)
- 像这样为 ScrollView 添加 IBOutlet
@IBOutlet weak var scrollView: UIScrollView!
- 导航到您的视图控制器文件
let alohaView = Bundle.main.loadNibNamed("Feature", owner: self, options: nil)?.first as? FeatureView
和 Feature
是你的 xib 文件,FeatureView
是你自定义的 UIView 文件控件,xib 文件
- 添加
alohaView?.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 500)
注意我对 500 高度进行了硬编码,将在这方面做更多工作
scrollView.contentSize = CGSize(width: self.view.frame.size.width, height: (alohaView?.frame.size.height)!)
scrollView.addSubview(alohaView!)
将自定义视图添加回滚动视图
目前,我正在通过 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+,我的滚动视图现在向右侧丢失了一点。
所以我尝试删除滚动视图,并且在所有设备上一切正常。所以从这些来看,我认为滚动视图一定搞砸了我的自定义视图。然后我做了一些自我研究并发现了这些主题。
ScrollView Add SubView in swift 3
我尝试了他们的解决方案并进行了修改以适应我的情况,但 none 似乎对我有用。所以我的问题是,有没有办法让 xib 文件的内容视图适合每个宽度?
今天刚解决,感觉很棒
- 去掉上面的所有步骤,只需要在自定义 UIView 文件中保留 IBOutlet
- 删除
File’s Owner
自定义 class 名称并将Content View
自定义 class 名称替换为与您的自定义 UIView 相同的名称
- 将 UIView 添加到您的
Main.storyboard
,我的例子是 ScrollView。添加所有必需的约束(duh) - 像这样为 ScrollView 添加 IBOutlet
@IBOutlet weak var scrollView: UIScrollView!
- 导航到您的视图控制器文件
let alohaView = Bundle.main.loadNibNamed("Feature", owner: self, options: nil)?.first as? FeatureView
和Feature
是你的 xib 文件,FeatureView
是你自定义的 UIView 文件控件,xib 文件- 添加
alohaView?.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 500)
注意我对 500 高度进行了硬编码,将在这方面做更多工作 scrollView.contentSize = CGSize(width: self.view.frame.size.width, height: (alohaView?.frame.size.height)!)
scrollView.addSubview(alohaView!)
将自定义视图添加回滚动视图