[英]How to change a parent view by clicking a button inside of subview in swift (Xcode)
[英]Subview that clips to parent view in Swift
我正在尝试添加一个始终与其父级大小相同的子视图,以便在父级大小发生变化时始终调整大小。
我正在考虑从代码中添加(顶部、底部、前导、尾随)约束。
当我添加子视图时,将执行以下代码:
subview.frame = parent.frame
subview.translatesAutoresizingMaskIntoConstraints = false
subview.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
subview.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
subview.topAnchor.constraint(equalTo: parent.topAnchor).isActive = true
subview.bottomAnchor.constraint(equalTo: parent.bottomAnchor).isActive = true
但子视图大小保持为 0,并显示在屏幕的左上角。 我不明白为什么它的大小为零,因为我设置了它的框架,也因为它具有设置其大小的所有约束。
检查员视图:
注意:父视图在左边,子视图( LoaderView
)在右边
您的父视图似乎是一个滚动视图,并且它缺少告诉它其可滚动内容大小是多少的约束(请注意第一个屏幕截图中的警告)。 由于没有定义内容大小,因此可滚动区域大小为零。
我不确定您需要什么约束,这取决于您的具体情况,但为了至少看到您的子视图,您可以向子视图及其父视图添加(例如)等宽和等高约束视图(滚动视图):
NSLayoutConstraint.activate([
subview.widthAnchor.constraint(equalTo: parent.widthAnchor),
subview.heightAnchor.constraint(equalTo: parent.heightAnchor)
])
这将可滚动区域定义为与滚动视图的框架在宽度和高度上相等。 但是,如果您这样做,那么当您尝试滚动超出可滚动区域时(如果此滚动视图已打开),除了弹跳行为之外,实际上不会有任何类型的滚动。
您可以改为将高度锚点更改为等于某个常数,以允许进行一些实际滚动:
NSLayoutConstraint.activate([
subview.widthAnchor.constraint(equalTo: parent.widthAnchor),
subview.heightAnchor.constraint(equalToConstant: 2000) // just some arbitrary amount for demonstration purposes
])
这使得可滚动高度等于 2000 点,而与滚动视图框架的高度无关。
或者,如果您希望可滚动区域是滚动视图框架高度的倍数,您可以在高度锚上设置一个乘数:
NSLayoutConstraint.activate([
subview.widthAnchor.constraint(equalTo: parent.widthAnchor),
subview.heightAnchor.constraint(equalTo: parent.heightAnchor, multiplier: 3)
])
这使得可滚动高度等于滚动视图框架高度的三倍。
如果你想要一个水平滚动的滚动视图,只需像我上面所做的那样更改widthAnchor
而不是heightAnchor
。 或者,如果您想要一个 2D 可滚动区域,让您可以垂直和水平平移,然后更改两者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.