2013-06-24 1 views
-1

проект: http://cl.ly/1T2K0V3w1P21У меня есть UILabel, расположенный на экране с autolayout, но когда я прячу панель навигации он вызывает метку «дергаться» на второй

Это лучше всего видно в рамках проекта, это небольшая загрузка урезанный до только контроллера вида.

В принципе, мой UILabel прекрасно находится на месте с автоматической компоновкой, но когда я скрываю панель навигации (вы можете сделать это в проекте, нажав на экран в любом месте), это заставляет его подергиваться. Как это сделать, чтобы он оставался в том же положении независимо от того, что происходит с навигационной панелью?

Кажется, что он анимированный (который я хочу) заставляет AutoLayout запутываться.

Вот что ограничение на этикетке выглядеть следующим образом:

enter image description here

Может кто-нибудь предложить несколько советов относительно того, что я делаю неправильно?

+0

я немного запутался на подходе , поскольку метка знает, что она находится в том же месте, а представление в целом перемещено вверх, вы можете каждый раз добавлять и вычитать пространство для навигатора, но если вы хотите продолжить этот проект, тогда вы можете подумать другого способа, например, с помощью кнопки или панели инструментов вверху и сохранения вида statio ни капли. эксперимент с автоматической отключение, а также на самом деле это бремя, и ваш uilabel выглядит намного более плавным, а некоторые другие изменения, а также более низкий текст не делают этого странного «поп-музыки». – rezand

+1

Я хочу использовать автоматический макет, он кажется полезным в целом, несмотря на его проблемы. И я не знаю, что именно вы говорите для первого абзаца/предложения. –

ответ

1

Вместо ограничения нижнего пространства вы можете попытаться определить ограничение верхнего пространства на супервизор с метки (которая равна 22 в константе), подключить его как IBOutlet к свойству вида и анимировать его при навигации бар скрыт или показан.

Например, я объявить верхнее пространство свойство, как topSpaceConstraint:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topSpaceConstraint; 

Затем внутри метода hideControls, можно анимировать ограничение:

- (void)hideControls:(BOOL)visible { 
    if (visible) { 
     [UIView animateWithDuration:UINavigationControllerHideShowBarDuration animations:^{ 
      self.topSpaceConstraint.constant = 66; //44 is the navigation bar height, you need to find a way not to hardcode this 
      [self.view layoutIfNeeded]; 
     }];  
    } 
    else { 
     [UIView animateWithDuration:UINavigationControllerHideShowBarDuration animations:^{ 
      self.topSpaceConstraint.constant = 22; 
      [self.view layoutIfNeeded]; 
     }]; 
    } 
    [self.navigationController setNavigationBarHidden:visible animated:YES]; 
    self.backFiftyWordsButton.hidden = visible; 
    self.forwardFiftyWordsButton.hidden = visible; 
    self.WPMLabel.hidden = visible; 
    self.timeRemainingLabel.hidden = visible; 
} 
Смежные вопросы