我在UIScrollView使用自动布局约束时遇到问题.

- ScrollView (leading, trailing, bottom and top spaces to superview)
-- ContainerView (leading, trailing, bottom and top spaces to superview)
--- ViewA (full width, top of superview)
--- ViewB (full width, below ViewA)
--- Button (full width, below ViewB)

ViewA和ViewB的初始高度为200点,但单击它可以将其垂直扩展到400点的高度.ViewA和ViewB通过更新其高度约束(从200到400)进行展开.以下是相应的代码片段:

if(self.contentVisible) {
    heightConstraint.constant -= ContentHeight;
    // + additional View's internal constraints update to hide additional content 
    self.contentVisible = NO;
} else {
    heightConstraint.constant += ContentHeight;
    // + additional View's internal constraints update to show additional content
    self.contentVisible = YES;
}

[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:.25f animations:^{
    [self.view layoutIfNeeded];
}];

我的问题是,如果两个视图都展开,我需要能够滚动查看整个内容,而现在滚动不起作用.如何使用约束来更新滚动视图,以反映ViewA和ViewB高度的变化?

到目前为止,我能想到的唯一解决方案是在动画之后手动设置ContainerView的高度,即ViewA+ViewB+按钮的高度之和.但我相信有更好的解决方案吗?

谢谢

推荐答案

我使用纯 struct ,如下所示

-view
  -scrollView
    -view A
    -view B
    -Button

确保按钮(THE LAST view)有一个约束条件(从底部到superview的垂直间距,即scrollview),在这种情况下,无论视图a和视图B有什么变化,scrollview的高度都会相应地改变.

我提到了这个伟大的在线book site.

只要阅读"创建滚动视图"部分,你就会有一个 idea .

我有一个类似的问题,我正在创建一个细节视图,使用界面生成器和自动布局非常适合这个任务!

祝你好运

(额外资源:

关于auto layout for scroll view的堆栈溢出讨论.

iOS 6对UIScrollView的自动布局支持进行了Release Notes次讨论.

免费在线iOS book explanation关于滚动查看.这实际上帮了我很多忙!

Objective-c相关问答推荐

iOS:警告try 呈现其视图不在窗口层次 struct 中的 ViewController

如何打印 NSMutableURLRequest?

如何在for (id item in items)objective-c 循环中获取数组索引?

在 10.9 上以编程方式启用对辅助设备的访问

Asihttprequest 61 错误

UISearchbar 键盘搜索按钮操作

indexOfObject 对比indexOfObjectIdenticalTo

测试应用程序是否确实从 UILocalNotification 变为活动状态

如何连续关闭 2 个模态视图控制器?

如何构建一个 Objective-C 静态库?

iOS 7 - viewDidLoad 和 viewDidAppear 之间的区别

如何在 iPhone 上画出讲话泡泡?

Lipo错误!!无法打开输入文件

判断 NSNumber 是否为 NaN

从 UIImage 获取 Exif 数据 - UIImagePickerController

从 UITabBarController 在当前上下文中呈现模态视图控制器后出现黑屏

如何在 Objective-C (iOS) 中判断 NaN 值

每个 ivar 都必须是一个属性吗?

字符串常量和字符串文字有什么区别?

CMTime 秒输出