通过更改模拟器设备来更改UIScrollView框架

时间:2018-11-18 12:17:09

标签: ios swift xcode uiscrollview xcode9

我有一个简单的ViewController,它使用UIScrollView显示图像,UIScrollView具有将其附加到superView(顶部,顶部,尾部)的约束,以及一个UIPageControl,在iPhoneX模拟器上可以正常工作

enter image description here

当我在iPad Pro 9.7“模拟器上运行它时,输出为

enter image description here

将情节提要中的查看为属性从iPhoneX更改为iPadPro 9.7”后,效果很好

enter image description here enter image description here

这是我用来计算 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])
    }
}

有人可以找到问题吗?

1 个答案:

答案 0 :(得分:1)

您是否尝试在setupSlideScrollView方法中打印视图的框架以确保其正确?如果使用AutoLayout,则不能保证在viewDidLoad方法中它是正确的。有时会,有时不会。我认为在这种情况下,它碰巧在iPhone X上是正确的,但在iPad上是错误的。

如果这是问题,则应在viewDidLayoutSubviews中设置contentSize和幻灯片的框架。将幻灯片作为子视图添加应保留在viewDidLoad / setupSlideScrollView中,因为通常会多次调用viewDidLayoutSubviews。