scrollview设定滚动方向(菜鸟填坑)

来源:互联网 发布:ios最简单的链式编程 编辑:程序博客网 时间:2024/05/20 09:11

禁止UIScrollView垂直方向滚动,只允许水平方向滚动

scrollview.contentSize =  CGSizeMake(你要的长度, 0); 

禁止UIScrollView水平方向滚动,只允许垂直方向滚动

scrollview.contentSize =  CGSizeMake(0, 你要的宽度); 


但是即使设置了contentSize的大小,还是有个坑要注意一下:因为contenInset值被意外修改过的时候,scrollview仍然可以滑动。

再配上UINavigationController每次push后再pop回来的情景,UIScrollView的contenInset都会重写改变重置,下面是KVO监测到的数据:


这种问题对于经验不久的新手来说很难定位到问题的所在。


下面是我在此复合情景中禁止scrollView上下滑动处理方法:

//设置contentSize    scrollView.contentSize = CGSizeMake(ksScreenWidth, 0);    [scrollView addObserver:self forKeyPath:@"contentInset" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];


//重写observeValueForKeyPath方法-(void)observeValueForKeyPath:(NSString *)keyPath                     ofObject:(id)object                       change:(NSDictionary *)change                      context:(void *)context{    if ([keyPath isEqual:@"contentInset"])    {        NSlog(@"contentSize被改变了");        NSlog(@"\n contentInset新:%@\n contentInset老:%@", [change objectForKey:@"new"],[change objectForKey:@"old"]);        if (object == scrollView) {                        UIEdgeInsets insets =[[change objectForKey:@"new"] UIEdgeInsetsValue] ;                        if (insets.bottom>0||insets.top>0) {                                scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);            }                    }    }}


- (void)dealloc{    /**     *  移除监听     */    [scrollView removeObserver:self forKeyPath:@"contentInset"];}



0 0
原创粉丝点击