正如我的研究表明的那样,甚至AutoLayout也无法帮助您。您必须手动替换受可选显示的组件影响的视图(在我的情况下,所有视图位于可选视图的底部,但是我敢肯定,您可以对其进行调整以处理可选按钮右侧的所有按钮。 ):
- (IBAction)toggleOptionalView:(id)sender {
if (!_expanded) {
self.optionalView.frame = CGRectMake(self.optionalView.frame.origin.x, self.optionalView.frame.origin.y, self.optionalView.frame.size.width, _optionalHeight);
self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y+_optionalHeight, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
_expanded = YES;
} else {
self.optionalView.frame = CGRectMake(self.optionalView.frame.origin.x, self.optionalView.frame.origin.y, self.optionalView.frame.size.width, 0);
self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y-_optionalHeight, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
_expanded = NO;
}
}
建议不要对可选组件的高度/宽度进行硬编码,否则,每次编辑XIB / Storyboard时,代码都会中断。我有一个在float view_idLoad中设置的float _optionalHeight字段,因此它始终是最新的。