2015-11-22 2 views
2

Извините, я не знаю лучшего названия.Отключить автоматическую анимацию макета для одного вида

Вопроса:

У меня есть один UITableViewCell с автоматической раскладкой, высота по умолчанию в бобах составляет 300 300 является правильным размером для одного из моих UIViewControllers.

Я использую UINavigationController внутри вида контейнера, под видом контейнера находится UIView под названием FooterView.

В контейнере видны два UIViewControllers; VC1 и VC2.

Когда я нажимаю VC2 на VC1, я также изменяю высоту FooterView с его NSLayoutConstraint постоянной высоты.

Я делаю это внутри анимации блока, с [self.view setNeedsLayout];

Я устанавливающего высоту для UITableViewCell внутри VC2 200.

Теперь проблема заключается в том, что, когда я переход от VC1 до VC2 вы также видите, что UITableViewCell анимируется от 300 до 200.

Я предполагаю, что это из-за блока анимации. Я протестировал его, удалив анимацию, и ячейка не оживилась (как и ожидалось).

Есть ли способ остановить эту анимацию?

Прошу прощения, если я недостаточно ясен.

+0

Вам действительно нужно позвонить 'setNeedsLayout'? Вы можете указать, какой вид оживить, а что нет. – kientux

+0

Вы имеете в виду, оживляя рамку? Дело в том, что нижнее ограничение представления контейнера связано с верхним ограничением FooterView, будет ли оно анимироваться и при изменении рамки FooterView с анимацией? –

+0

Я думаю, что неправильно понял вашу ситуацию. Скриншот будет хорошим. – kientux

ответ

6

Все, что мне нужно было сделать, чтобы переопределить layoutSubviews внутри клетки:

- (void)layoutSubviews 
{ 
    [UIView performWithoutAnimation:^{ 
     [super layoutSubviews]; 
     [self.contentView layoutIfNeeded]; 
     _shadowView.layer.shadowPath = [UIBezierPath bezierPathWithRect:_shadowView.bounds].CGPath; 
    }]; 
} 
Смежные вопросы