Iphone 为什么我的UIScrollView的内容大小没有改变?

Iphone 为什么我的UIScrollView的内容大小没有改变?,iphone,xcode,swift,uiscrollview,scrollview,Iphone,Xcode,Swift,Uiscrollview,Scrollview,我正在尝试制作一个包含不同设置的UIScrollView。尽管我将UIScrollView连接到我的ViewController并通过编程更改了内容大小,但UIScrollView只会水平滚动,而不是它应该的方式(它应该只垂直滚动)。这是我用来定义UIScrollView内容大小的内容: self.scrollView.contentSize = CGSize(width: self.view.bounds.width, height: 1400) 另一件重要的事情是,我将View contr

我正在尝试制作一个包含不同设置的
UIScrollView
。尽管我将UIScrollView连接到我的ViewController并通过编程更改了内容大小,但
UIScrollView
只会水平滚动,而不是它应该的方式(它应该只垂直滚动)。这是我用来定义UIScrollView内容大小的内容:

self.scrollView.contentSize = CGSize(width: self.view.bounds.width, height: 1400)
另一件重要的事情是,我将View controller simulated size设置为freeform,宽度为375,高度为1000

我一直在想办法,但我找不到我做错了什么。如果你知道这是什么原因,我会非常感激


提前感谢。

UIScrollview内容大小动态调整(取决于子视图框架)

func viewDidLayoutSubviews() {
self.scrollView.contentSize = CGSize(width: self.view.bounds.width, height: 1400)
}
斯威夫特:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    DispatchQueue.main.async {
        var contentRect = CGRect.zero

        for view in self.scrollView.subviews {
           contentRect = contentRect.union(view.frame)
        }

        self.scrollView.contentSize = contentRect.size
    }
}
目标C:

 - (void)viewDidLayoutSubviews {
     [super viewDidLayoutSubviews];

     dispatch_async(dispatch_get_main_queue(), ^ {
                        CGRect contentRect = CGRectZero;

                        for(UIView *view in scrollView.subviews)
                           contentRect = CGRectUnion(contentRect,view.frame);

                           scrollView.contentSize = contentRect.size;
                       });
}

UIScrollview内容动态大小(取决于子视图框架)

斯威夫特:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    DispatchQueue.main.async {
        var contentRect = CGRect.zero

        for view in self.scrollView.subviews {
           contentRect = contentRect.union(view.frame)
        }

        self.scrollView.contentSize = contentRect.size
    }
}
目标C:

 - (void)viewDidLayoutSubviews {
     [super viewDidLayoutSubviews];

     dispatch_async(dispatch_get_main_queue(), ^ {
                        CGRect contentRect = CGRectZero;

                        for(UIView *view in scrollView.subviews)
                           contentRect = CGRectUnion(contentRect,view.frame);

                           scrollView.contentSize = contentRect.size;
                       });
}

你能分享你的代码吗?这样我们就可以知道问题出在哪里了。特别是scrollview正在初始化,你在哪里设置内容大小。请阅读尝试在viewdidlayoutsubviews函数中设置内容大小,并告诉我它是否起作用。这是因为你做的太快了
self.view.bounds.width
还没有它的真正价值。@giuliocollecloori我面对的场景是在不同屏幕大小上调试时,在viewdidload中调用scrollview contentsize设置了错误的内容大小。例如,如果故事板中的视图大小比viewdidload中的视图大小大320,则返回的大小始终为320,即使对于iphone 6和6 plus也是如此,因此在viewDidLayoutSubviews()中设置内容大小工作是因为自动布局已经完成了对每个视图的处理,并且大小都很好。你能分享你的代码吗?这样我们就可以知道哪里出了问题。特别是scrollview正在初始化,你在哪里设置内容大小。请阅读尝试在viewdidlayoutsubviews函数中设置内容大小,并让我知道它是否工作。这是因为我们这么做太早了
self.view.bounds.width
还没有它的真正价值。@giuliocollecloori我面对的场景是在不同屏幕大小上调试时,在viewdidload中调用scrollview contentsize设置了错误的内容大小。例如,如果故事板中的视图大小比viewdidload中的视图大小大320,则返回的大小始终为320,即使对于iphone 6和6 plus也是如此,因此在viewDidLayoutSubviews()中设置内容大小因为autolayout已经完成了对每个视图的处理,并且大小良好,所以可以正常工作。