当removeFromSuperView时,UIScrollView禁用滚动

时间:2015-01-22 14:34:57

标签: ios objective-c uiview uiscrollview

我有一个.xib文件有一个视图,一个标签栏和其他3个scrollViews,当用户选择一个新标签栏项时我执行此代码:

//Views e Scrolls
    IBOutlet UIView *myView;
    IBOutlet UIScrollView *myScroll;
    IBOutlet UIScrollView *myScroll2;
    IBOutlet UIScrollView *myScroll3;

@property (nonatomic) UIScrollView *scroll;

-(void)tabBar:(UITabBar *)tabBar
didSelectItem:(UITabBarItem *)item{

    NSArray *viewsToRemove = [myView subviews];
    for (UIView *v in viewsToRemove) {
        [v removeFromSuperview];
    }

    if(item.tag == 1){
        self.title = @"scroll 1";
        scroll = myScroll;
    }
    if(item.tag == 2){
        self.title = @"scroll 2";
        scroll = myScroll2;
    }
    if(item.tag == 3){
        self.title = @"scroll 3";
        scroll = myScroll3;
    }

    scroll.contentSize = scroll.frame.size;
    scroll.frame = myView.frame;

    scroll.scrollEnabled = YES;

    [myView addSubview:scroll];

    [myView setBackgroundColor:[UIColor clearColor]];

}

这段代码效果很好,但是当我选择之前从视图中删除的其中一个卷轴时,它们会丢失滚动(之前没有发生过),为什么会发生这种情况以及如何解决?

3 个答案:

答案 0 :(得分:0)

假设我理解你的意图是正确的:从超级视图中删除滚动视图也会将其从响应者链中删除。它不能再响应触摸事件 - 因此不会滚动。

答案 1 :(得分:0)

这一行在这里:

scroll.contentSize = scroll.frame.size;

当您的UIScrollView contentSize与其frame.size匹配时,它不需要滚动(按定义)。您需要弄清楚其内容的实际大小并使用它。通过这样做,您至少可以证明正确的功能(即使它没有正确的值):

scroll.contentSize = CGSizeMake(scroll.frame.size.width*2, scroll.frame.size.height*2);

但是,您必须为自己找到真正的内容大小。

答案 2 :(得分:0)

问题本身和你的代码目的不是很清楚。您可以尝试进一步解释。并检查此行 -

scroll.contentSize = scroll.frame.size;

其contentSize< = frame.size的UIScrollView不会滚动。要使其滚动,contentSize应该大于frame.size

您通常应该根据scrollView的内容量(子视图)设置contentSize。

在下一行中你更改了frame.size,但我认为在你的情况下,这不会使帧大小小于contentSize。