使用自动布局时,我的理解是删除子视图(当然同时保留对它的引用),删除的子视图仍然知道其自动布局约束。
但是,当稍后将其添加回超级视图时,子视图不再知道其帧大小。
相反,它似乎得到了零帧。
我假设自动布局会自动调整其大小以满足约束。难道不是这样吗?
我认为自动布局意味着不要弄乱框架矩形。即使使用自动布局,添加子视图时是否仍然需要设置初始框架矩形?
删除子视图时,与该子视图相关的所有约束都将丢失。如果稍后需要再次添加子视图,则必须再次向该子视图添加约束。
通常,我在自定义子视图中创建约束。例如:
-(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
。或者,更好的是,设置约束,这样您就不必这样做。
请参阅我对该主题的回答:
具有编程调整大小的自动布局 UIImageView 不遵循约束
您不需要设置初始框架。如果你使用initWithFrame
,只需将其设置为CGRectZero
。事实上,你的限制将会must- 详细说明某个东西应该有多大,或者意味着运行时可以推断出大小的其他关系。
例如,如果您的视觉格式是:@"|-[myView]-|"
,这就是水平维度所需的一切。自动布局会知道大小myView
不超过父母的界限superview
表示为|
。它太酷了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)