Я уже давно застрял в этой проблеме. При разработке приложений iOS в объекте-c, как мы можем программным образом изменить положение (местоположение) UIView при включении Autolayout? Это так просто без Autolayout, так как мы просто указать новый центр для UIView как таковые:Как программно изменить положение UIView при включении автоопределения
UIView.center = CGPointMake(x,y);
Однако, выше уже не работает из-за Autolayout. В конечном счете, я пытаюсь оживить определенный UIView, используя преобразование трансляции слева направо. Для этого, однако, мне нужно переместить UIViews программно, чего я в настоящее время не могу сделать. Ниже то, что я пытаюсь сделать, по существу (но он не работает из-за autolayout):
_loginTextLabel.center = CGPointMake(1,1);
[UIView animateWithDuration:0.5 delay:0.5 options:nil animations:^{
_loginTextLabel.center= CGPointMake(5, 1);
} completion:nil
];
}
В этом посте есть несколько интересных идей: http://stackoverflow.com/questions/11368440/can-i-disable-autolayout-for-a-specific-subview-at-runtime Простое место для начала, попробуйте установка 'translatesAutoresizingMaskIntoConstraints = YES' перед установкой нового центра. –
@WilliamSmith Еще одна проблема. Почему «CGPointMake (_loginTextLabel.bounds.origin.x, _loginTextLabel.bounds.origin.y)« производит значение (0,0), когда я его использую? Это не правильно. Это также проблема автозапуска? – Vimzy
Наверное, сначала я спрошу, почему вы думаете, что это неправильно? Свойство bounds определяет допустимую область UIView относительно кадра. Обычно он по умолчанию равен (0, 0, ширина, высота). Из документов Apple «Размер прямоугольника границ связан с размером прямоугольника рамки, так что изменения одного влияют на другой. Изменение размера границ увеличивает или уменьшает представление относительно его центральной точки». Вы можете прочитать свойство bounds здесь: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/bounds –