首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >contentView比UIScrollView短

contentView比UIScrollView短
EN

Stack Overflow用户
提问于 2017-01-27 20:50:25
回答 2查看 98关注 0票数 0

我可以在下面的代码中向下滚动:

代码语言:javascript
复制
- (void)viewDidLayoutSubviews {
    dispatch_async (dispatch_get_main_queue(), ^ {
        CGFloat scrollViewHeight = 0.0f;
        for (UIView* view in self.scrollView.subviews) {
            scrollViewHeight += view.frame.size.height;
        }

        [self.scrollView setContentSize:(CGSizeMake(320, scrollViewHeight))];
    });
}

但是,当我滚动时,contentView (灰色)是短的,它下面的所有东西都不能工作:

编辑:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-27 21:11:44

编辑--布局可能有两种错误。(1)滚动视图(灰色)的单个子视图需要足够大以包含它的子视图,(2)正如OP所暗示的那样,scrollView contentSize也必须如此。

代码语言:javascript
复制
UIView *grayView = // get a pointer to that grayView
CGFloat maxContentY = 0.0;
for (UIView* view in grayView.subviews) {
    maxContentY = MAX(maxContentY, CGRectGetMaxY(view.frame));
}
grayView.frame = CGRectMake(0,0, 320,maxContentY);

如果这是scrollView的唯一子视图,那么contentSize很简单:

代码语言:javascript
复制
[self.scrollView setContentSize:grayView.frame.size];

如果除了灰色视图之外,还有其他子视图,那么我最初的回答是也是,grayView的大小为则表示其他子视图的最大范围:

我们通常的目标是使contentSize.height足够大,包括最底层的子视图的底部边缘。

这与运算式中的子视图高度之和不同。(考虑偏置y == 1000和高度== 2的单个子视图,我们希望高度为1002,而不是2),所以.

代码语言:javascript
复制
- (void)viewDidLayoutSubviews {
    dispatch_async (dispatch_get_main_queue(), ^ {
        CGFloat maxY = 0.0f;
        for (UIView* view in self.scrollView.subviews) {
            maxY  = MAX(maxY, CGRectGetMaxY(view.frame));
        }
        [self.scrollView setContentSize:(CGSizeMake(320, maxY))];
    });
}

异步调用是无害的,但希望是不必要的。要么循环在琐碎的时间内运行,要么我们添加了太多的子视图。

票数 0
EN

Stack Overflow用户

发布于 2017-01-28 07:31:00

试试这个

代码语言:javascript
复制
- (void)viewDidLayoutSubviews {
    dispatch_async (dispatch_get_main_queue(), ^ {

        CGRect contentRect = CGRectZero;
        for (UIView *view in self.scrollView.subviews)
            contentRect = CGRectUnion(contentRect, view.frame);
        [self.scrollView setContentSize:contentRect.size];

    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41902811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档