UIScrollView无法滚动(故事板)

8

我刚接触Storyboard;之前使用过Interface Builder,并且进行了大量手动UI定位。我搜索了这个问题,尝试了其他相关帖子中找到的解决方案,但都没有成功。

我有一个在Storyboard中添加了UIScrollView的视图控制器。ScrollView已连接好outlet并合成了属性。滚动启用已勾选。反弹已勾选。即使如此,也没有任何滚动的迹象。当我勾选垂直反弹时,我至少可以看到可滚动的内容,但是释放后会反弹回去。我发现框架大小设置为320和521。我尝试了不同的高度,但是没有什么帮助。(在Storyboard中应该设置什么大小才能适应较旧和较新的手机尺寸?)

在viewDidLoad中,我添加了

    [scrollView setContentSize:CGSizeMake(320, 1000)];

接着的日志记录证实了该值已被接受。但这也没有帮助。

在一篇帖子中,有人建议添加:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [self.scrollView setContentSize:CGSizeMake(320, 808)];
}

这会导致控制器加载时程序崩溃。
非常感谢您的帮助!
谢谢。

也许你有另一种关于滚动和触摸的观点,可以代替它吗? - Grzegorz Krukowski
将您的视图控制器设置为UIScrollViewDelegate的代理。它带有一堆方法,您可以在其中测试scrollView是否正在接收触摸。在此处检查文档 https://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/Reference/UIScrollViewDelegate.html。 - Priyatham51
嗨,Grzegorz,据我所知,滚动视图顶部只有一堆标签和文本字段。 - Casey Perkins
Priyatham51,谢谢你的提示。我按照你的指示实现了scrollViewWillBeginDragging,并且它确实接收到了触摸事件。 - Casey Perkins
3个回答

20

需要做两件事情:

1)将scrollview的高度设置为480。

2)在scrollview中最下方的字段中添加约束。 约束是Pin >> 底部间距至Superview。


1
我也通过向我的UIScrollView添加正确的约束来解决了这个问题。 - Albin Stigo
谢谢。谢谢。谢谢。再次感谢。问题是第二个数字。 - Dimmy3
我认为只有#2是真正需要的。不确定为什么我认为需要#1。 - Casey Perkins
数字2是关键,但基本上您还要在父视图上放置底部布局约束,并且不为其中一个设置480。 - Nemanja

9

只需添加以下方法:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [self.scrollView setContentSize:CGSizeMake(320, 1700)];
}

对我来说,这个完美地工作。


这是个问题:(void)viewDidLayoutSubviews。人们(包括我)在(void)viewDidLoad或其他地方错误地编写“self.scrollView setContentSize”。重申一遍:这就是问题所在,即(void)viewDidLayoutSubviews。 - Markus
内容大小是什么? - user1872384

1

这是在我的viewDidLoad()方法中对我有效的代码,其中scrollView是我的滚动视图对象,lastField是我滚动视图上的最后一个字段:

scrollView.translatesAutoresizingMaskIntoConstraints = false
    
let constraint = NSLayoutConstraint(item: scrollView, attribute: .bottom, relatedBy: .equal, toItem: lastField, attribute: .bottom, multiplier: 1.0, constant: 0.0)
    
self.view.addConstraint(constraint)

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