gpt4 book ai didi

ios - 带有一个 child 的 ScrollView 和 AutoLayout 不滚动

转载 作者:行者123 更新时间:2023-11-28 21:45:23 30 4
gpt4 key购买 nike

我有一个 ViewController 设置如下:

enter image description here

这是一个新闻应用程序,所以所有内容都是动态加载的,一旦我完成将数据加载到文章标题、文章内容和 ImageView (外部 ScrollView )中,就不会真正滚动

我还检查了 ContentView 以获取其大小(只是调试)它给出了高度:0px(这是我最初为其设置的高度)

我的背景是用于移动开发的 Android/Java,所以我将高度设置为 0,我不确定 android 中是否有类似“Wrap_Content”的内容(-1:以 android 为例,内部属性值)。

并且在所有方面我都想找到一种方法使 ContentView 动态调整大小以包括其 subview 的所有高度和间距。然后 Scroll View 会显示一个漂亮的 Scroll。

我尝试过的:

1-将 ContentView 的高度设置为例如 (1000) -> 它使 ScrollView 正常滚动(但这样神奇的数字是不好的)。

2-尝试了以下代码(一旦我完成将数据加载到 subview 中)

// Given that the references of the UI elements in my ViewController are:
// scrollView and contentView
- (void)updateScroll{
self.scrollView.translatesAutoresizingMaskIntoConstraints = NO;
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

// Iterate over SubViews of ContentView
for (UIView* subView in self.contentView.subviews) {
subView.translatesAutoresizingMaskIntoConstraints = NO;
}
[self.scrollView setContentSize:self.contentView.frame.size];
}

我用这个调试:

NSLog(@"Content view's frame is: %@", NSStringFromCGRect(self.contentView.frame));

总是得到这样的输出:

2015-05-24 00:30:36.123 NewsApp[18983:2738892] Content view's frame is: {{0, 0}, {343, 0}}

现在,当我什至尝试使用这段代码一个一个地浏览 subview 时:

    for (UIView* v in self.contentView.subviews) {
v.translatesAutoresizingMaskIntoConstraints = NO;
totalHeight += v.frame.size.height;
NSLog(@"My view %@ frame is: %@",v.class ,NSStringFromCGRect(v.frame));
}

尺寸如下:(如您所见,ImageView 显示高度:0px)--> 一切都毁了 :(

2015-05-24 01:59:38.696 NewsApp[20218:3145567] My view UILabel frame is: {{10, 20}, {323, 52.5}}

2015-05-24 01:59:38.696 NewsApp[20218:3145567] My view UIImageView frame is: {{10, 82.5}, {323, 0}}

2015-05-24 01:59:38.696 NewsApp[20218:3145567] My view UILabel frame is: {{10, 92.5}, {323, 507.5}}

约束:

1-ScrollView:从各个方向(水平和垂直)0 像素

2-ContentView:距水平位置 0 px 且“宽度”与 ScrollView 相同(还尝试从顶部添加约束 0px,还尝试从顶部和底部添加 0px)。

3 篇文章标题、图片 View 、文章内容:水平 0 像素,垂直等间距,并相互放置)。

我的环境:构建目标 iOS 8,XCode:v. 6.3,项目当然启用了 AutoLayout

解决方案:在ContentView和ScrollView之间添加top和bottom约束(Vertical为0)或任意固定数,在ContentView内部的最后一个元素和ContentView本身之间添加Bottom Contraint

最佳答案

您需要将 ScrollView 和内容 View 固定到主视图的宽度和高度。然后在内容 View 中,将每个元素的顶部和底部固定到 View 并相互固定,以根据元素的高度定义内容高度(之间有一个小空间。)

检查 所有 subview 是否在两个方向上垂直固定,并且有一系列连续的固定点定义了 ContentView 的形状。您缺少从 ArticleContentView 到 ContentView 底部的底部约束。

关于ios - 带有一个 child 的 ScrollView 和 AutoLayout 不滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418328/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com