UIScrollView页面内容无法正常工作 - iOS

时间:2017-10-26 18:50:59

标签: ios iphone swift uiscrollview

我一直在努力让它工作一整天。我尝试了不同的tutos并进行了调整(在这里搜索),但它无法正常工作。

在iphone 5s上,它几乎可以正常工作,除了最后一页,它似乎在滚动视图中添加了“一半”页面。绿色部分是滚动视图的背景颜色,它不会反弹。

enter image description here

在iphone 6上,内容全部搞砸了,而不是有5张图片,它只有4个半(我不能再滚动它,它不会反弹)。

enter image description here

如果我按下继续,它在两种屏幕尺寸上都能正常工作。只有滑动选项无法正常工作。

这是我将图像放在滚动视图中的代码。

func loadContent() {
    var frame = CGRect(x: 0, y: 0, width: 0, height: 0)
    for i in 0..<imageArr.count { // is 5
        frame.origin.x = scrollView.frame.size.width * CGFloat(i)
        frame.size = self.scrollView.frame.size
        let imageView = UIImageView(frame: frame)
        let image = UIImage(named: imageArr[i])
        imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin]
        imageView.contentMode = .scaleAspectFit
        imageView.clipsToBounds = true
        imageView.backgroundColor = UIColor.red
        imageView.image = image
        scrollView.addSubview(imageView)
        self.scrollView.contentSize.width = self.scrollView.frame.width * CGFloat(i)
    }
}
///Function of Continue button
@IBAction func nextImage(_ sender: Any) {
    UIView.animate(withDuration: 0.3) {
        self.scrollView.contentOffset.x = self.scrollView.frame.width * CGFloat(self.pageControl.currentPage+1)
    }
}

我一直在寻找4小时的解决方案,但似乎没有任何效果。

[编辑]:有了TheFuquan的答案,我可以解决问题。

[Obs:] 如果您搜索混乱的内容,这些代码行可以帮助您。我看到的所有tutos都没有这些线条,而且内容不会完美对齐,这就解决了:

    imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin]
    imageView.contentMode = .scaleAspectFit
    imageView.clipsToBounds = true

2 个答案:

答案 0 :(得分:3)

为什么for loop中有以下一行:

self.scrollView.contentSize.width = self.scrollView.frame.width * CGFloat(i)

您应该在for loop之前执行此操作:

self.scrollView.contentSize.width = self.scrollView.frame.width * imageArr.count

答案 1 :(得分:2)

这是我每次尝试在视图中加载一些动态内容时遇到的典型问题。

如果您从loadContent调用您的viewDidLoad功能,那么您应该在loadContent内拨打viewDidLayoutSubviews

请注意,与viewDidLoad不同,viewDidLayoutSubviews可能会多次调用,因此请设置一个标记,以确保只调用loadContent一次。

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        guard self.didLoadContent == false else {
            return
        }

        self.didLoadContent = true
        loadContent()
    }

这样您就可以从故事板中加载视图来调整iPhone的大小。