2014-10-09 2 views
0

В viewDidLoad, у меня есть начальная установка, как это -IOS упорядочение поведения в viewDidLoad

// Output all the appropriate text to UITextLabel depending on the state of the app 
[self presentData]; 

// Button sizing 
UIelement.frame=CGRectMake(blah blah blah); 

Почему, когда я делаю это в предыдущем порядке, я получаю текст, выводимый без размера подстройки до Настоящие данные снова вызываются другой функцией в то время как при вводе кода в порядке

UIelement.frame=CGRectMake(blah blah blah); 
[self presentData]; 

будет размером его соответствующим образом, чтобы начать. Я понимаю, что порядок важен, но что я хочу знать, почему? Как я могу узнать, почему что-то подобное происходит в следующий раз, когда у меня есть такая проблема? я предполагаю, что представление данных, изменение uilabel, обновление представления, но по какой-то причине cgrectmake не обновляет представление, а просто изменяет значение фрейма uilabel в модели. Я прав? Как я могу найти ответ на такой вопрос, не спрашивая онлайн-сообщество в следующий раз?

+0

Вы ссылаетесь на 'UITextLabel'. Я предполагаю, что вы имели в виду 'UILabel'. Позже вы ссылаетесь на 'UIelement', но в комментарии говорится о« настройке кнопок ». Именно о каких средствах управления мы говорим? – Rob

+0

Кроме того, как эти элементы управления были добавлены? Программно или через IB? Покажите нам больше кода ... – Rob

+0

Элементы управления были добавлены через построитель интерфейса, связанный с @properties и программным. да, я имел в виду uilabel. –

ответ

0

Несколько возможностей:

  1. Вы, по-видимому, используя auto layout. При автоматической компоновке процесс установки значения метки text ярлыка приведет к тому, что ограничения будут повторно применены для представления. Когда вы вручную устанавливаете frame, это действует только до тех пор, пока не будут повторно применены ограничения автоматической компоновки (например, вы снова обновите UILabel или позвоните по телефону layoutIfNeeded), после чего пересчитывается/корректируется frame. Как правило, в автоматическом макете нельзя вручную отрегулировать рамку.

  2. Возможно, presentData вызывает sizeToFit или что-то в этом роде? Это, очевидно, изменит и frame.

+0

Я не использую автомат. Я снял флажок, потому что это не позволило мне изменить размер чего-либо без его снятия. –

+0

Хм. Авто-макет - единственное, что я знаю об этом, чтобы объяснить это поведение. Обратите внимание, что даже если раскадровка имеет автоматическую компоновку выключена, если у вас есть код, который программно добавляет любые ограничения, которые влияют на поведение. Если это еще не так, я бы предложил создать [MCVE] (http://stackoverflow.com/help/mcve), который воспроизводит проблему. Если мы не можем воспроизвести его, это трудно поделать. – Rob

+0

настоящие данные вызывается sizetofit. Я не знал, как это работает, и я видел пример онлайн, поэтому я просто использовал его, не заглядывая в него. Должен ли я использовать его за пределами существующих данных, так как я вызываю presentdata alot? (много раз я просто вижу функцию онлайн и просто проверяю, работает ли она, не глядя на то, как и почему она работает). редактирование «возможно, не должно этого делать». –

Смежные вопросы