【问题标题】:NSLayoutAnchor not working with UIScrollViews inside UITableViewCellNSLayoutAnchor 不能与 UITableViewCell 中的 UIScrollViews 一起使用
【发布时间】: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


【解决方案1】:

这似乎是 Xcode 中某处的错误。我实际上已经创建了一个新项目并从头开始构建了自动布局代码(使用 UILayoutAnchor)并且它可以工作。我已经确保代码是最初使用的代码的逐字副本,因此只能假设它是系统中某处的小精灵。奇怪,但 Xcode 有时会这样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2017-04-14
    相关资源
    最近更新 更多