我有一个简单的ViewController,它使用UIScrollView显示图像,UIScrollView具有将其附加到superView(顶部,顶部,尾部)的约束,以及一个UIPageControl,在iPhoneX模拟器上可以正常工作
当我在iPad Pro 9.7“模拟器上运行它时,输出为
将情节提要中的查看为属性从iPhoneX更改为iPadPro 9.7”后,效果很好
这是我用来计算 scrollviewContentSize 和 slidesSize
的逻辑 override internal func viewDidLoad() {
super.viewDidLoad()
tutorialScrollView.delegate = self
viewModel = TutorialViewModel()
configurePages()
setupSlideScrollView(slides: slides)
configurePageControl()
}
private func configurePages() {
if let viewModel = viewModel {
createSlides(tutotialPages: viewModel.getTutorialPages())
}
}
private func createSlides(tutotialPages: [TutorialPage]) {
for page in tutotialPages {
if let slide = Bundle.main.loadNibNamed(BUNDLE_ID, owner: self, options: nil)?.first as? TutorialSlideView {
slide.configure(title: page.title, detail: page.details, image: page.image)
slides.append(slide)
}
}
}
private func setupSlideScrollView(slides: [TutorialSlideView]) {
tutorialScrollView.contentSize = CGSize(width: view.frame.width * (CGFloat(slides.count)), height: tutorialScrollView.frame.height)
tutorialScrollView.isPagingEnabled = true
for i in 0 ..< slides.count {
slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: tutorialScrollView.frame.height)
tutorialScrollView.addSubview(slides[i])
}
}
有人可以找到问题吗?
答案 0 :(得分:1)
您是否尝试在setupSlideScrollView方法中打印视图的框架以确保其正确?如果使用AutoLayout,则不能保证在viewDidLoad方法中它是正确的。有时会,有时不会。我认为在这种情况下,它碰巧在iPhone X上是正确的,但在iPad上是错误的。
如果这是问题,则应在viewDidLayoutSubviews中设置contentSize和幻灯片的框架。将幻灯片作为子视图添加应保留在viewDidLoad / setupSlideScrollView中,因为通常会多次调用viewDidLayoutSubviews。