UIScrollView 不会作为子视图在里面滚动

Posted

技术标签:

【中文标题】UIScrollView 不会作为子视图在里面滚动【英文标题】:UIScrollView won't scroll inside as subview 【发布时间】:2012-11-12 19:31:47 【问题描述】:

我有一个 UIViewController 和一个 UIScrollView。由于我必须向视图控制器添加多个视图,而滚动视图只是其中之一,因此我尝试将控制器的视图设置为虚拟 UIView 并将滚动设置为子视图,如下所示:

    [self setView:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]];
    [[self view] setUserInteractionEnabled:NO];

    // TDHexMapScrollView inherits from UIViewController
    [self setHexMapScrollView:[[TDHexMapScrollView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]];
    [[self view] addSubview:[self hexMapScrollView]];

这样滚动不起作用。将其添加为主视图使滚动和平移正常工作:

    [self setHexMapScrollView:[[TDHexMapScrollView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]];
    [self setView:[self hexMapScrollView]];

有什么帮助吗?谢谢

【问题讨论】:

检查两者是否都有 userInteractionEnabled=YES 你试过设置contentInset scrollView 是否包含所有其他视图?或者你只是想滚动某个子集?我已经做过很多次了,但我对你可能缺少的第一个猜测是[TDHexMapScrollView setContentSize:size of the views to be scrolled]; 【参考方案1】:

不要这样做:

[[self view] setUserInteractionEnabled:NO];

这会禁用视图和所有子视图的交互。这意味着它会忽略触摸事件并且不会将它们传播到其子视图,这意味着您的滚动视图不会收到任何事件。

【讨论】:

我后来添加了它作为尝试之一。将其设置为 yes 或 no 不会改变非工作行为【参考方案2】:

我的评论没有得到回复,但我想我会向您展示我如何做到这一点的示例。

声明

CGSize scrollSize;

在您的实施中。然后创建你的滚动视图、视图、标签等。

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, screenFrame.size.width, screenFrame.size.height - self.tabBarController.tabBar.frame.size.height - self.navigationController.navigationBar.frame.size.height)];
self.scrollView.scrollEnabled = YES;
scrollSize.height = self.View1.frame.size.height + self.Label1.frame.size.height + self.Label2.frame.size.height + self.Label3.frame.size.height + self.Label4.frame.size.height + self.Label5.frame.size.height + self.Label6.frame.size.height;
scrollSize.width = screenFrame.size.width;
[self.scrollView setContentSize:scrollSize];

添加到滚动视图

[self.scrollView addSubview:self.View1];
//Repeat for all views / labels / etc

将scrollView添加到ViewController

[self.view addSubview:self.scrollView];

【讨论】:

以上是关于UIScrollView 不会作为子视图在里面滚动的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 在视图出现之前不会接受子视图

UIScrollView的不会滚动!

UIScrollView 中的 UIToolbar 修复了 UIViewController 作为子视图滚动问题

尽管内容大小正确,但 UIScrollview 不会滚动; textview 子视图框架也表现得很奇怪

如果涉及superview,则不会排除子视图点击的UIScrollView

子视图不会将后沿与其父 UIScrollView 对齐