Насколько мне известно, в Visibility не существует такой вещи, как Visibility. Даже AutoLayout не может вам помочь.Вы должны вручную заменить виды, на которые воздействует опционально показанный компонент (в моем случае, все виды под опциональным видом на bottomView):
- (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 / раскадровку.У меня есть поле с плавающей точкой _optionalHeight, которое я установил в viewDidLoad, поэтому оно всегда актуально.