更改 UIScrollView 内容大小

Posted

技术标签:

【中文标题】更改 UIScrollView 内容大小【英文标题】:Change UIScrollView Content size 【发布时间】:2016-05-09 10:56:11 【问题描述】:

我有带有 UIScrollView、一些 UIImages 和 UIButtons 的 ViewController。 在情节提要中,我将 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));

【问题讨论】:

【参考方案1】:

这个函数有错误:

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));

一切正常

【讨论】:

【参考方案2】:

嘿@Dim,你可以试试这个-

yourScrollView.contentSize = CGSizeMake(320, 568)

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

【讨论】:

嘿@Mohd,我尝试在 viewDidLoad 中添加 scrlMain.contentSize = CGSizeMake(320, 790)。但我也有同样的问题。 对我来说不是。我将 UIScrollView 向下移动,但它没有修复。它向后移动。如果在 viewDidAppear 中添加此代码,UIScrollView 可以修复。但我不能使用 viewDidAppear。 您可以使用 共享您的屏幕 是的,我可以。我该怎么做? 我在 Skype 上给你写了信。如果您没有收到我的请求,请写下您的登录信息。【参考方案3】:

试试这个:

yourScrollView.userInteractionEnabled = YES

请保持屏幕大小和滚动视图内容大小之间的差异......以便它可以正常显示

假设你的ScrollViewSize 大于你的ScreenSize

【讨论】:

我添加了代码:scrlMain.userInteractionEnabled = true;在 viewDidLoad 中。但我有同样的问题。在 Storyboard 中 ViewController 有 570 个,UIScrollController 有 570 个。【参考方案4】:
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 总是在主线程上调用 - 将此工作从主线程传递给主线程是多余的。

以上是关于更改 UIScrollView 内容大小的主要内容,如果未能解决你的问题,请参考以下文章

方向更改时的 UIScrollview 内容大小

UIScrollView 不使用自动布局滚动(内容视图框架大小以编程方式更改)

iOS - 更改 UIScrollView 的大小后 ContentOffset 保持不变

UIScrollView 显示为零?

如何动态调整 UIScrollView 的大小?

自动布局的 UIScrollView 内容大小问题