ios - 在 Swift 中剪辑到父 View 的 subview

标签 ios swift uikit nslayoutconstraint nslayoutanchor

我正在尝试添加一个始终与其父级大小相同的 subview ,以便在父级大小发生变化时始终调整大小。

我正在考虑从代码中添加(顶部、底部、前导、尾随)约束。

当我添加 subview 时,将执行此代码:

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

但 subview 大小保持为 0,并显示在屏幕的左上角。
我不明白为什么它的大小为零,因为我设置了它的框架,也因为它具有设置其大小的所有约束。

检查员 View :

注意:父 View 在左侧, subview (LoaderView)在右侧

parent view subview

最佳答案

您的父 View 似乎是一个 ScrollView ,并且它缺少告诉它其可滚动内容大小是多少的约束(请注意第一个屏幕截图中的警告)。由于没有定义内容大小,因此可滚动区域大小为零。

我不确定您需要什么约束,这取决于您的具体情况,但为了至少看到您的 subview ,您可以向您的 subview 及其父 View 添加(例如)等宽和等高约束 View ( ScrollView ):

NSLayoutConstraint.activate([
    subview.widthAnchor.constraint(equalTo: parent.widthAnchor),
    subview.heightAnchor.constraint(equalTo: parent.heightAnchor)
])

这将可滚动区域定义为与 ScrollView 的框架在宽度和高度上相等。但是,如果您这样做,那么当您尝试滚动超出可滚动区域时(如果此 ScrollView 已打开),除了弹跳行为之外,实际上不会有任何类型的滚动。

您可以改为将高度 anchor 更改为等于某个常数,以允许进行一些实际滚动:
NSLayoutConstraint.activate([
    subview.widthAnchor.constraint(equalTo: parent.widthAnchor),
    subview.heightAnchor.constraint(equalToConstant: 2000) // just some arbitrary amount for demonstration purposes
])

这使得可滚动高度等于 2000 点,而与 ScrollView 框架的高度无关。

或者,如果您希望可滚动区域是 ScrollView 框架高度的倍数,您可以在高度 anchor 上设置一个乘数:
NSLayoutConstraint.activate([
    subview.widthAnchor.constraint(equalTo: parent.widthAnchor),
    subview.heightAnchor.constraint(equalTo: parent.heightAnchor, multiplier: 3)
])

这使得可滚动高度等于 ScrollView 框架高度的三倍。

如果你想要一个水平滚动的 ScrollView ,只需更改 widthAnchor而不是 heightAnchor就像我在上面所做的那样。或者,如果您想要一个 2D 可滚动区域,让您可以垂直和水平平移,然后更改两者。

关于ios - 在 Swift 中剪辑到父 View 的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61318153/

相关文章:

html - 在iOS中使UIWebview的字体加粗

ios - 使用子类向我的 UIButton 添加了一个下拉三角形,如何在更改标题时防止它拉伸(stretch)?

swift - NSCharacterSet.characterIsMember() 与 Swift 的字符类型

ios - 本地化 UIDatePicker "Today"标签

ios - 如何将 UIImage 旋转 90 度?

ios - swift框架中使用modulemap桥接OC,project中报缺少所需模块

ios - 过滤 searchText 到 tableView

ios - 将方法连接到按钮并初始化

ios - 绘制矩形 :withAttributes dies with "message sent to deallocated instance"

ios - 加载自己的 ca 证书时,Swift 2.0 中 SecTrustEvaluate 调用上的 EXC_BAD_ACCESS