Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中剪辑到父视图的子视图_Ios_Swift_Uikit_Nslayoutconstraint_Nslayoutanchor - Fatal编程技术网

Ios 在Swift中剪辑到父视图的子视图

Ios 在Swift中剪辑到父视图的子视图,ios,swift,uikit,nslayoutconstraint,nslayoutanchor,Ios,Swift,Uikit,Nslayoutconstraint,Nslayoutanchor,我正在尝试添加一个子视图,该子视图将始终与其父视图具有相同的大小,以便在父视图大小更改时始终调整其大小 我正在考虑从代码中添加(顶部、底部、前导、尾部)约束 添加子视图时,将执行以下代码: subview.frame = parent.frame subview.translatesAutoresizingMaskIntoConstraints = false subview.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isAc

我正在尝试添加一个子视图,该子视图将始终与其父视图具有相同的大小,以便在父视图大小更改时始终调整其大小

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

添加子视图时,将执行以下代码:

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(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
。或者,如果您想要一个二维可滚动区域,可以在垂直和水平方向上进行平移,则可以同时进行更改。

这些视图中是否有一个是滚动视图(我假设是这样,因为我看到消息“可滚动内容大小不明确”)?您的故事板或xib中是否有任何自动布局警告?为什么要在故事板和代码中添加约束?你只需要在一个地方做。最后,如果您使用的是自动布局,则无需关心子视图框架的设置。@Rob感谢您的回答。我没有在情节提要中添加约束,因为我是以编程方式添加子视图的。是的,你是对的,我不需要设定frame@Rob这些是视图层次调试器的屏幕截图——我最初还以为它们也是故事板的截图,呵呵。非常感谢,它工作得非常好!但我仍然觉得奇怪的是,它适用于宽度和高度约束,但不适用于底部/尾部?我得到一个观点,因为它是一个可滚动的视图,高度和宽度没有定义,但是为什么它使用宽度约束呢?或者我遗漏了什么?你需要告诉scrollview有多大的可滚动区域。仅仅给出子视图的顶部、前导、底部和尾部约束是不够的(这些约束被约束到可滚动区域,而不是滚动视图的框架——理解差异很重要),因为这些约束本身并不能为滚动视图提供足够的信息来确定可滚动区域的宽度和高度。希望这是有道理的!谢谢我的想法是,在加载集合视图的内容时,我希望在集合视图的顶部显示一个自定义加载视图;)
NSLayoutConstraint.activate([
    subview.widthAnchor.constraint(equalTo: parent.widthAnchor),
    subview.heightAnchor.constraint(equalTo: parent.heightAnchor, multiplier: 3)
])