【问题标题】:UIScrollView got freeze when Back button pressed?按下后退按钮时 UIScrollView 冻结?
【发布时间】:2019-10-20 15:01:34
【问题描述】:

我有一个(UIViewUICollectionViewUIScrollView)作为1stVC。我必须同时滚动两者,而我已经无法滚动集合视图。所以第一次当我启动那个屏幕时,我可以滚动整个视图,但是当我推到(下一个ViewController2ndVC,然后按返回按钮到1stVC时,我的滚动视图没有执行它得到冻结。

试过这个方法:-

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];

    dispatch_async(dispatch_get_main_queue(), ^ {
        CGRect contentRect = CGRectZero;

        for(UIView *view in self.scrollView.subviews)
            contentRect = CGRectUnion(contentRect,view.frame);

        self.scrollView.contentSize = contentRect.size;
    });
}

试过这个方法:-

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];

    [_scrollView setContentSize:CGSizeMake(_scrollView.frame.size.width, _scrollView.frame.size.height)];

}

为了获得集合视图的动态高度,我已经完成了这个

CGFloat height = _collectionCompass.contentSize.height;

我已提供给 ScollView ContentSize。

_scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width, height);

请帮帮我。

【问题讨论】:

  • 为什么要手动设置collectionView的大小?约束或 UICollectionViewDelegateFlowLayout 协议。取决于您的用例。没有截图很难分辨。

标签: ios objective-c uiscrollview


【解决方案1】:

我真正建议的是删除滚动视图并在集合视图中执行所有操作,因为使用滚动视图您会失去一些好处(例如单元格重用)。滚动视图中的集合视图也是一种不好的做法。 来自Apple style guide

不要将滚动视图放在另一个滚动视图中。这样做会创建一个难以控制的不可预测的界面。

如果您的 UI 作为列表,您可以将视图添加为集合视图的标题或另一个单元格。使用这种方法,您可以从 viewDidLayoutSubviews 中删除代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2011-01-22
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多