ios - 以编程方式将 UiView 作为 subview

标签 ios swift nslayoutconstraint

我的 ViewController 看起来像这样。有一个父 ScrollView 保存 UIView (wrapperView),这个包装 View 内部有 TextView 和 ImageView。 这个简单的结构是通过界面构建​​器创建的,具有所需的所有约束,因此它可以正常工作。

enter image description here

在某些情况下,我需要以编程方式在 ImageView 下的wrapperView 中再添加一个 UIView(绿色箭头指向那里)。

所以我为新的 UIView 创建了 xib 文件并为其创建了单独的类

class MyView : UIView {
    class func instanceFromNib() -> UIView {
        return UINib(nibName: "MyView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
    }
}

我添加了 ViewController 的代码

let myView = MyView.instanceFromNib()
myView = CGRect(x: 0, y: 0, width: 300, height: 80)
wrapperView.addSubview(myView)

现在我在屏幕上看到了wrapperView顶部的myView,但是当我尝试应用像

这样的约束时
NSLayoutConstraint(item: myView, attribute: .top, relatedBy: .equal, toItem: myImageView, attribute: .bottom, multiplier: 1.0, constant: 8).isActive = true

我得到

Unable to simultaneously satisfy constraints

我做错了什么?

最佳答案

首先您需要设置:

myView.translatesAutoresizingMaskIntoConstraints = false

然后您必须确保您自己的约束不存在冲突。在 Storyboard中,您可能添加了一个约束,将 imageView.bottomAnchor 绑定(bind)到 wrapperView.bottomAnchor。现在,如果您在这两个 anchor 之间放置另一个 View ,则需要停用该约束。

否则,如果您尝试挤压 myView 那里,可能会导致约束冲突 - 想象有一个约束说:

  1. imageView.bottomAnchor 应该距离 wrapperView.bottomAnchor 10 点,

但还有两个限制说明

  • imageView.bottomAnchor 应距 myView.topAnchor 10 个点,myView.bottomAnchor 应距 wrapperView.bottomAnchor 10 个点
  • 显然这两种情况都无法满足。

    关于ios - 以编程方式将 UiView 作为 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47350953/

    相关文章:

    ios - 异步 completionHandler 中的返回值

    ios - 仅在 UIImagePickerController 中显示视频

    swift - SKLabelNode 包含 (q,y,p,g or j) 时更高

    ios - NSLayoutConstraint 不适用于 uibutton 和 uilabel

    ios - 对相同大小的类别有不同约束的任何解决方法?

    ios - scrollToRowAtIndexPath 始终从顶部而不是从当前偏移量开始滚动

    ios - youtube api播放器无法在iOS上运行吗?

    ios - "Cannot invoke ' 在压缩图像上插入 ' with an argument list of type"

    ios - AudioKit v4.2 上的 AKRhodesPiano 错误(挤压)

    ios - 旋转到横向时如何更新约束