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