iOS 从超级视图中删除对象会破坏自动布局并禁用滚动视图
Posted
技术标签:
【中文标题】iOS 从超级视图中删除对象会破坏自动布局并禁用滚动视图【英文标题】:iOS removing an object from superview demolishes auto layout and disables scrollview 【发布时间】:2014-01-07 15:43:00 【问题描述】:我有一个按钮,它以编程方式布局并使用手动设置的约束进行定位。然后我尝试通过调用removeFromSuperview
从视图中删除该按钮。移除按钮会导致位于按钮下方的集合视图子视图丢失其在scrollview
中的位置,并将其自身与所有其他对象后面的superview
顶部对齐。我希望集合视图可以简单地移动到按钮所在的位置,一旦按钮并且它的约束已从视图中删除。 我错过了什么?
按钮创建:
aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[aButton addTarget:self
action:@selector(buttonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[aButton setTitle:@"Expand" forState:UIControlStateNormal];
[aButton setTranslatesAutoresizingMaskIntoConstraints:NO];
[self addSubview:aButton];
按钮移除:
- (void)buttonPressed:(UIButton *)sender
NSLog(@"Pressed");
[aButton removeFromSuperview];
垂直定位(detailOfLocation 为集合视图):
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[locationImageContainer(213)][locationTitle][locationDescription][aButton][detailOfLocation]|"
options:0
metrics:0
views:viewArranging]];
[编辑]
按钮的移除似乎也禁用了 UIScrollView 的滚动能力,这是放置所有东西的超级视图。
【问题讨论】:
【参考方案1】:移除按钮后你可能会有一些不足的约束,所以也许你应该补偿这些。例如,您可能想要在locationDescription
和detailOfLocation
之间添加一个约束,因为在移除按钮后它们的垂直位置变得不明确。滚动视图滚动也可能与约束有关。看看这个answer
【讨论】:
是的!我让按钮从视图中移除后立即应用更新的约束,现在一切都按预期显示。以上是关于iOS 从超级视图中删除对象会破坏自动布局并禁用滚动视图的主要内容,如果未能解决你的问题,请参考以下文章