UIScrollView不滚动

Mar*_*ark 125 iphone uiscrollview ipad ios

我有一个UIScrollView包含许多UIImageViews,UILabels等...标签比它长得多UIScrollView,但是当我运行应用程序时,我无法点击并向下滚动...

为什么会这样?

谢谢

Bog*_*tyr 166

显示完整的工作代码片段总是很好:

// in viewDidLoad (if using Autolayout check note below):

UIScrollView *myScrollView;
UIView *contentView;
// scrollview won't scroll unless content size explicitly set

[myScrollView addSubview:contentView];//if the contentView is not already inside your scrollview in your xib/StoryBoard doc

myScrollView.contentSize = contentView.frame.size; //sets ScrollView content size
Run Code Online (Sandbox Code Playgroud)

Swift 4.0

let myScrollView
let contentView

// scrollview won't scroll unless content size explicitly set

myScrollView.addSubview(contentView)//if the contentView is not already inside your scrollview in your xib/StoryBoard doc

myScrollView.contentSize = contentView.frame.size //sets ScrollView content size
Run Code Online (Sandbox Code Playgroud)

我还没有找到在IB中设置contentSize的方法(从Xcode 5.0开始).

注意:如果您使用的是Autolayout,那么将此代码放在-(void)viewDidLayoutSubviews方法中的最佳位置.

  • 不要忘记设置`myScrollView.delegate = self`,如果这仍然不起作用,这个下面的答案有很好的建议(转到你的xib/StoryBoard并确保"AutoLayout"被禁用).专业提示:您还可以`<UIScrollViewDelegate>`在.h文件中,如果你希望做的事情一样编程滚动你的UIScrollView. (12认同)
  • 将代码放在`viewDidLayoutSubviews`中使它对我有用. (2认同)

use*_*652 119

如果在正确设置contentSize后仍无法滚动视图,请确保在Interface Builder - > File Inspector中取消选中 "Use AutoLayout".

  • 或者,您可以在**viewDidLayoutSubviews:**中设置**contentSize**,并在autolayout完成后应用它. (157认同)
  • @"Chris Vasselli"解决我的问题.. GR8 .. :-) (2认同)
  • 克里斯的评论应该是一个单独的答案! (2认同)

Chr*_*lli 67

您需要设置contentSize滚动视图的属性才能正确滚动.

如果您使用自动布局,你需要设置contentSizeviewDidLayoutSubviews,以便它的自动布局完成后应用.

代码可能如下所示:

-(void)viewDidLayoutSubviews
{
    // The scrollview needs to know the content size for it to work correctly
    self.scrollView.contentSize = CGSizeMake(
        self.scrollContent.frame.size.width,
        self.scrollContent.frame.size.height + 300
    );
}
Run Code Online (Sandbox Code Playgroud)


Jas*_*ues 45

上面的答案是正确的 - 要使滚动发生,有必要设置内容大小.

如果您正在使用界面构建器,那么使用用户定义的运行时属性可以采用一种简洁的方法.例如:

在此输入图像描述

  • 哎呀,图片显示{0,0},但你当然要把足够多的数字放进去..这种方法仅适用于您预先知道内容大小的简单视图...(事实上​​,对于复杂的视图,我建议使用纯代码). (4认同)

wzb*_*zon 39

尝试将内容大小调整为大量.我无法理解为什么我的滚动视图即使其内容大小似乎大于控件大小也不会滚动.我发现如果内容大小小于需要,它也不起作用.

self.scrollView.contentSize = CGSizeMake(2000, 2000);
Run Code Online (Sandbox Code Playgroud)

而不是2000你可以把自己的大数字.如果它有效,则意味着当您调整大小时,您的内容大小不够大.

滚动视图无需委托即可工作.

  • 天才-一种检查情况的简单方法。谢谢一群! (2认同)

Ben*_*ieb 13

确保将滚动视图的contentSize属性设置为正确的大小(即,足以包含所有内容的大小).


小智 7

取消选中"使用Autolayout"为我做了诀窍.

环境:xCode 5.0.2故事板ios7


dev*_*os1 5

就我而言,我必须设置delaysContentTouches为 true,因为 scrollView 内的对象都在捕获触摸事件并自行处理,而不是让 scrollView 本身处理它。


Vin*_*mar 5

设置in方法的contentSize属性。像这样的东西UIScrollviewViewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    scrollView.contentSize = CGSizeMake(view.frame.size.width, view.frame.size.height)
}
Run Code Online (Sandbox Code Playgroud)