2013-11-13 6 views
2

Я создал UIView программно, что вкладывается несколько UIControl с (UIButton с, UISwitch с и UILabel S в основном). Я установил в -(id)initWithFrame: этого класса цвет фона. Я создал сообщение, чтобы добавить UIControls в представление, чтобы помещать внутри моего пользовательского представления. Это что-то вроде этого:Добавить пользовательские UIView программно создается внутри XIB UIView

-(void) CreateGuiObjects 
{ 
    UIView *container = self; 

    //create uiswitch 
    mOnOffSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, 20, 0, 0)]; 
    mOnOffSwitch.translatesAutoresizingMaskIntoConstraints = NO; //used for constraint testing 
    //add parent view (self) 
    [container addSubview: mOnOffSwitch]; 

    /* 
    other stuff like above 
    */ 

} 

тогда в моем представлении контроллер есть обработчик события для внешней кнопки; действие заключается в том, чтобы добавить вышеупомянутый пользовательский вид в пустой UIView, созданный с помощью конструктора интерфейса раскадровки в Xcode.

код вроде следующего:

-(void)CreateButton 
{ 
    MyCustomView *view = [MyCustomView alloc] initWithFrame:CGRectMake(20,20,300,200)]; 
    [self.view addSubview: view]; 
    //now call my create method 
    [view CreateGuiObjects]; 
} 

сейчас, проблема заключается в том, что он рисует контроль, но, кажется, расположить их в другом месте ... я установить рамку происхождения для контейнера просмотрите в (20,20), а затем установите переключатель в (10,20), где эта точка относится к исходному виду пользовательского представления. Вместо этой позиции вид кажется далеко от этой позиции, а вторая проблема заключается в том, что цвет фона (серый), установленный в initWithFrame, полностью игнорируется. Если я удалю каждый вызов addSubview внутри CreateGuiObjects, он рисует пустой вид с правильным цветом фона и в правильном положении.

Редактировать: если удалить `mOnOffSwitch.translatesAutoresizingMaskIntoConstraints = NO; он отлично работает ... но если я снова стану, это не сработает. Необходимо глубоко понять смысл этого свойства.

Может ли кто-нибудь мне помочь? я думаю, что это глупый вопрос, но я новичок в разработке IOS :(

спасибо советы

ответ

1

Метод translatesAutoresizingMaskIntoConstraints = YES означает, что UIView использует Auto Layout.

Фундаментальная здание блок в Auto Layout является ограничением. Ограничения выражают правила размещения элементов в вашем интерфейсе , например, вы можете создать ограничение, определяющее ширину элемента или его горизонтальное расстояние от другого элемента. Вы a dd и удалить ограничения или изменить свойства ограничений, , чтобы повлиять на расположение вашего интерфейса.

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

подробнее о Auto Layout Concepts

Если вы не знаете, как использовать Auto Layout я бы рекомендовал вам, чтобы выключить его.

+0

спасибо за предложения! Я использовал NSLayoutConstraint (с предикатом, а не с визуальным кодированием), чтобы позиционировать представления, и для этого я установил свойство NO (в противном случае у меня проблема с ограничением из-за того, что superiew преобразует autoresizemask в ограничения, я думаю) , Я прочитал этот раздел в руководствах и успешно прошел испытания в других проектах ...поэтому я не могу понять, почему сейчас это не работает. – MisterXYX83

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