我以编程方式创建了一个UIView
,主要嵌入了几个UIControl
s(UIButton
s,UISwitch
和UILabel
s。我在这个类的-(id)initWithFrame:
中设置了背景颜色。
我创建了一条消息,在视图中添加UIControls,以便放入我的自定义视图。它是这样的:
-(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
*/
}
然后在我的视图控制器中有一个外部按钮的事件处理程序;操作是在Xcode中使用Storyboard Interface Builder创建的空UIView
中添加上述自定义视图。
代码如下:
-(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中设置的背景颜色(灰色)被完全忽略。 如果我在CreateGuiObjects中删除对addSubview的每次调用,它会使用正确的背景颜色并在正确的位置绘制空视图。
编辑: 如果删除`mOnOffSwitch.translatesAutoresizingMaskIntoConstraints = NO;它工作正常...但如果我再次放它不起作用。需要深入了解这个属性的含义。
有人可以帮助我吗?我认为这是一个愚蠢的问题,但我是iOS开发的新手:(
感谢您的建议
答案 0 :(得分:1)
方法translatesAutoresizingMaskIntoConstraints = YES表示UIView正在使用自动布局。
自动布局中的基本构建块是约束。 约束表达了你的元素布局的规则 接口;例如,您可以创建指定的约束 元素的宽度,或与其他元素的水平距离。您 添加和删除约束,或更改约束的属性, 影响你的界面布局。
计算用户中元素的运行时位置时 界面,自动布局系统考虑了所有约束 同时,以最能满足所有人的方式设定职位 约束。
如果您不知道如何使用自动布局,我建议您将其关闭。