Как переместить текстовое поле и кнопку, размещенные с помощью Interface Builder

У меня есть текстовое поле и кнопка, которые я разместил в Interface Builder для 3,5-дюймового iPhone. Я программно проверяю, является ли это iPhone 5, если это текстовое поле и кнопка. У меня не установлен флажок «Autoresize Subviews» в контроллере представления, текстовом поле и кнопке. Код, который у меня есть, находится в viewDidLoad, и если это iPhone 5, он попадает в строки, но не перемещает текстовое поле или кнопку.

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 568)
    {
        self.chatBox.frame = CGRectMake(20,509,201,30);
        self.submitButton.frame = CGRectMake(227,504,73,39);

        [self.view addSubview:self.chatBox];
        [self.view addSubview:self.submitButton];
    }
}

person heinst    schedule 12.09.2013    source источник
comment
здесь нет необходимости в addSubview внутри условия, так как вы берете объекты с IB. поэтому удалите эти две строки и зарегистрируйте свои объекты self.chatBox и self.submitButton, которые дадут вам свои свойства, чтобы вы узнали, был ли фрейм изменен или нет.   -  person D-eptdeveloper    schedule 12.09.2013


Ответы (2)


Если вы используете автомакет, ваши ограничения могут иметь приоритет над вашим кодом выше. Без автоматического макета я использовал этот код:

    int adjustY=44;
    CGPoint iPhone5center=CGPointMake(theButton.center.x,theButton.center.y+adjustY);
    theButton.center=iPhone5center; 

Дополнительные сведения см. в этом вопросе. У меня проблема с его использованием с автоматической компоновкой в ​​режиме прокрутки.

person David L    schedule 12.09.2013
comment
Если вы используете автомакет, процесс установки ограничений происходит после viewDidLoad. Попробуйте добавить свой код в viewDidAppear. См. этот ответ stackoverflow.com/a/12632880/1203475. - person David L; 13.09.2013

Проблема, с которой вы столкнулись, заключается в том, что фрейм переопределяется Auto Layout. Прежде чем настраивать рамку вида с помощью автоматического макета, добавьте следующую строку кода:

[self setTranslatesAutoresizingMaskIntoConstraints:YES];

Это должно преобразовать любой фрейм, который вы установили, в новые ограничения и обновить их. Если вы не хотите переводить их в ограничения, очевидно, просто передайте «НЕТ» этому сообщению, чтобы добиться этого.

person John Rogers    schedule 12.09.2013
comment
это тоже не сработало для меня. [self setTranslatesAutoresizingMaskIntoConstraints:YES]; не был допустимым синтаксисом, поэтому я попробовал self.submitButton.translatesAutoresizingMaskIntoConstraints = YES; и self.view.translatesAutoresizingMaskIntoConstraints = YES;, оба из которых не работали - person heinst; 12.09.2013