【发布时间】:2015-08-05 18:04:41
【问题描述】:
我有一个 ViewController 设置如下:
这是一个新闻应用,所以一切都是动态加载的, 一旦我完成将数据加载到文章标题、文章内容和图像视图(外部滚动视图)并不会真正滚动
我还检查了 ContentView 以获取它的大小(只是调试)它给出的高度:0px(这是我最初为它设置的高度)
我的背景是用于移动开发的 Android/Java,所以我将高度设置为 0,我不确定 android 中是否有类似“Wrap_Content”的内容(-1:以 android 的内部属性值为例)。
在所有方面,我都想找到一种方法让 ContentView 动态调整大小以包括其子视图的所有高度 + 间距。然后 Scroll View 会显示一个漂亮的 Scroll。
我尝试了什么:
1-将 ContentView 的高度设置为例如 (1000) -> 它使 ScrollView 正常滚动(但这样的神奇数字很糟糕)。
2-尝试了以下代码(一旦我将数据加载到子视图中)
// 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] 内容视图的框架是:{{0, 0}, {343, 0}}
现在,当我什至尝试使用此代码一一浏览子视图时:
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] 我的视图 UILabel 框架是: {{10, 20}, {323, 52.5}}
2015-05-24 01:59:38.696 NewsApp[20218:3145567] 我的视图 UIImageView 框架是:{{10, 82.5}, {323, 0}}
2015-05-24 01:59:38.696 NewsApp[20218:3145567] 我的视图 UILabel 框架是:{{10, 92.5}、{323、507.5}}
约束:
1-ScrollView: 0 px 从所有方向(水平和垂直)
2-ContentView:水平位置 0 px,与 ScrollView 相同的“宽度”(还尝试从顶部添加约束 0px,并尝试从顶部和底部添加 0px)。
3-Articles Title、Image View、Article Content:水平 0px,垂直等间距,并置于彼此下方)。
我的环境: 构建目标 iOS 8,XCode:v. 6.3,项目当然启用了 AutoLayout
解决方案:在ContentView和ScrollView之间添加上下约束(垂直为0)或任意固定数字,并在ContentView内部最后一个元素和ContentView本身之间添加底部约束
【问题讨论】:
标签: ios objective-c uiscrollview autolayout