iOS从superview中删除对象会破坏自动布局并禁用scrollview

时间:2014-01-07 15:43:01

标签: ios uiview uiscrollview uibutton autolayout

我有一个按钮,通过手动设置的约束以编程方式布局和定位。然后,我尝试通过调用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的滚动功能,UIScrollView是放置所有内容的超级视图。

1 个答案:

答案 0 :(得分:1)

删除按钮后,你可能会有一些不足的约束,所以也许你应该补偿那些。例如,您可能希望在locationDescriptiondetailOfLocation之间添加约束,因为删除按钮后它们的垂直位置会变得模糊不清。滚动视图滚动也可能与约束相关。看看这个answer