gpt4 book ai didi

cocoa - 使用自动布局删除并重新添加 subview

转载 作者:行者123 更新时间:2023-12-03 16:05:07 26 4
gpt4 key购买 nike

当使用自动布局时,我的理解是删除 subview (当然同时保留对它的引用),删除的 subview 仍然知道其自动布局约束。

但是,当稍后将其添加回 super View 时, subview 不再知道其帧大小。相反,它似乎得到了零帧。

我假设自动布局会自动调整其大小以满足约束。难道不是这样吗?我认为自动布局意味着不要弄乱框架矩形。即使使用自动布局,添加 subview 时是否仍然需要设置初始框架矩形?

最佳答案

删除 subview 时,与该 subview 相关的所有约束都将丢失。如果稍后需要再次添加 subview ,则必须再次向该 subview 添加约束。

通常,我在自定义 subview 中创建约束。例如:

-(void)updateConstraints
{
if (!_myLayoutConstraints)
{
NSMutableArray *constraints = [NSMutableArray array];

// Create all your constraints here
[constraints addWhateverConstraints];

// Save the constraints in an ivar. So that if updateConstraints is called again,
// we don't try to add them again. That would cause an exception.
_myLayoutConstraints = [NSArray arrayWithArray:constraints];

// Add the constraints to myself, the custom subview
[self addConstraints:_myLayoutConstraints];
}

[super updateConstraints];
}

updateConstraints 将由自动布局运行时自动调用。上面的代码位于您的 UIView 的自定义子类中。

你是对的,在使用自动布局时,你不想改变框架大小。相反,只需更新 updateConstraints 中的约束即可。或者,更好的是,设置约束,这样您就不必这样做。

查看我对该主题的回答:

Autolayout UIImageView with programatic re-size not following constraints

您不需要设置初始帧。如果您确实使用 initWithFrame,只需将其设置为 CGRectZero 即可。您的约束将 - 事实上必须 - 详细说明某个东西应该有多大,或者意味着运行时可以推断出大小的其他关系。

例如,如果您的视觉格式是:@"|-[myView]-|",这就是水平尺寸所需的一切。自动布局将知道将 myView 的大小调整为由 | 表示的父 superview 的边界。非常酷。

关于cocoa - 使用自动布局删除并重新添加 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17228758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com