更改UIScrollView的内容大小

6

我有一个带有UIScrollView、一些UIImages和UIButtons的ViewController。

在Storyboard中,我将UIScrollView的大小设置为:宽度:320,高度:570

我想在ViewController加载时更改我的UIScrollView的Contentsize。

我在viewDidLoad中添加了以下代码:

        scrlMain.contentSize = CGSize(width: 320,height: 790)

我也在viewDidLayoutSubviews:方法中添加了代码:

        self.scrlMain.translatesAutoresizingMaskIntoConstraints = true

但是我的UIScrollView仍然是最后的尺寸为570。 我不能使用viewDidAppear,因为当我按下按钮时,它需要改变颜色。当它改变了颜色,我的UIScrollView就会向上移动。
我做错了什么吗?
所有代码:
    override func viewDidLoad() {
    super.viewDidLoad()
    scrlMain.delegate = self
    scrlMain.contentSize = CGSizeMake(320, 790)
    }
override func viewDidLayoutSubviews() {
    self.scrlMain.translatesAutoresizingMaskIntoConstraints = true
    self.scrlMain.contentSize = CGSize(width: self.scrlMain.frame.width, height: 60.0 + 5 * (self.scrlMain.frame.width / 16.0 * 5.0));
}
5个回答

8

这个函数出现了错误:

override func viewDidLayoutSubviews() {
self.scrlMain.translatesAutoresizingMaskIntoConstraints = true
self.scrlMain.contentSize = CGSize(width: self.scrlMain.frame.width, height: 60.0 + 5 * (self.scrlMain.frame.width / 16.0 * 5.0));
}

我删除了这段代码:
self.scrlMain.contentSize = CGSize(width: self.scrlMain.frame.width, height: 60.0 + 5 * (self.scrlMain.frame.width / 16.0 * 5.0));

一切都很顺利


1
嗨,@Dim,你可以尝试这个 -
yourScrollView.contentSize = CGSizeMake(320, 568)

你可以将大小568更改为任何您想要的大小。


嗨 @Mohd,我在viewDidLoad中尝试添加了 scrlMain.contentSize = CGSizeMake(320, 790),但是问题仍然存在。 - Dim
对我来说不行。我将UIScrollView向下移动,但它无法固定。它会反弹回去。如果在viewDidAppear中添加此代码,UIScrollView可以固定。但我不能使用viewDidAppear。 - Dim
你能使用 <Skype 或 TeamViewer> 分享你的屏幕吗? - Swift Developer
可以的。我该怎么做? - Dim
我在 Skype 上给你发了消息。如果你没有收到我的请求,请告诉我你的登录名。 - Dim

0

试试这个:

yourScrollView.userInteractionEnabled = YES

请确保您的屏幕尺寸和滚动视图内容尺寸之间的差异...以便可以正确显示。
假设您的滚动视图大小大于您的屏幕大小。

我在viewDidLoad中添加了代码:scrlMain.userInteractionEnabled = true; 但是我仍然遇到同样的问题。在Storyboard中,ViewController有570个,UIScrollController也有570个。 - Dim

0

还可以在页面内部更改内容大小,而无需再次运行ViewDidLoad。

只需添加

scrollView.layoutIfNeeded()

在设置新的contentSize之后

例如,当您在UIscrollView(scrollViewImages)中更改内容大小(viewImages)时

viewImages.frame.size = CGSize(width: width, height: 128)
viewImages.translatesAutoresizingMaskIntoConstraints = true
viewImages.setNeedsLayout()
scrollViewImages.setNeedsLayout()
scrollViewImages.layoutIfNeeded()

0
override func viewDidLayoutSubviews() {

    DispatchQueue.main.async {
    self.scrollview.translatesAutoresizingMaskIntoConstraints = true
    self.scrollview.contentSize = CGSize(width:0, height:self.scrollview.frame.height*2) // whatever hight you want
    }
}

viewDidLayoutSubviews总是在主线程上调用 - 从主线程传递此工作到主线程是多余的。 - worthbak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接