【发布时间】:2015-12-20 19:24:34
【问题描述】:
我正在尝试重构以编程方式在 UIScrollView 上创建自动布局约束的代码,该 UIScrollView 是 UITableViewCell 的 contentView 的子视图,但得到了一些不寻常的效果。
被替换的代码 sn-p 是:
let scrollViewHorizontalConstraints =
NSLayoutConstraint.constraintsWithVisualFormat("H:|[sv]|",options: [], metrics: nil, views: viewDictionary)
viewConstraints.appendContentsOf(scrollViewHorizontalConstraints) /// scrollviewConstraints is an array!
let scrollViewVerticalConstraints =
NSLayoutConstraint.constraintsWithVisualFormat("V:|[sv]|", options: [], metrics: nil, views: viewDictionary)
我应该可以用新的 iOS9 UILayoutAnchor API 替换它,如下所示:
scrollView.leftAnchor.constraintEqualToAnchor(contentView.leftAnchor).active = true
scrollView.rightAnchor.constraintEqualToAnchor(contentView.rightAnchor).active = true
scrollView.topAnchor.constraintEqualToAnchor(contentView.topAnchor).active = true
scrollView.bottomAnchor.constraintEqualToAnchor(contentView.bottomAnchor).active = true
但是,此代码失败(没有错误)。约束未正确构建 - 生成的滚动视图与父视图的高度匹配,但与宽度不匹配,尽管它有一个子视图限制为 UITableViewCell contentView 的宽度。原始版本可以正常运行。
使用新符号在标准 UIView 中构建相同的结构是可行的,因此我怀疑存在错误,但我们将不胜感激地收到任何建议。
【问题讨论】:
-
您是否尝试过检查滚动视图的 contentSize 属性?
-
刚刚检查过 - contentSize 值与使用 XCode 中的视图调试器显示的值匹配:height 34pt , width 0pt
-
我刚刚构建了一个小型测试应用程序,它剥离了滚动视图的大部分自定义实现,并且正在正确构建约束。这表明代码中存在一些不是立即显而易见的冲突 - 我将继续重新实现功能并看看会发生什么
-
能否尝试明确设置内容大小?
-
内容大小的显式设置也无济于事(而且碰巧会破坏我对不同大小类和方向的实现)。感谢您的建议
标签: swift uitableview uiscrollview autolayout ios9