添加在XIB UIView中以编程方式创建的自定义UIView

时间:2013-11-13 10:29:40

标签: ios uiview uiviewcontroller

我以编程方式创建了一个UIView,主要嵌入了几个UIControl s(UIButton s,UISwitchUILabel 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开发的新手:(

感谢您的建议

1 个答案:

答案 0 :(得分:1)

方法translatesAutoresizingMaskIntoConstraints = YES表示UIView正在使用自动布局。

  

自动布局中的基本构建块是约束。   约束表达了你的元素布局的规则   接口;例如,您可以创建指定的约束   元素的宽度,或与其他元素的水平距离。您   添加和删​​除约束,或更改约束的属性,   影响你的界面布局。

     

计算用户中元素的运行时位置时   界面,自动布局系统考虑了所有约束   同时,以最能满足所有人的方式设定职位   约束。

详细了解Auto Layout Concepts

如果您不知道如何使用自动布局,我建议您将其关闭。