繁体   English   中英

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

[英]Add custom UIView programmatically created inside XIB UIView

我已经以编程方式创建了一个UIView ,它嵌入了几个UIControl (主要是UIButtonUISwitchUILabel )。 我在此类的-(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开发的新手:(

感谢建议

方法translationsAutoresizingMaskIntoConstraints = YES表示UIView使用自动布局。

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

在计算用户界面中元素的运行时位置时,自动版式系统会同时考虑所有约束,并以最能满足所有约束的方式设置位置。

阅读有关自动布局概念的更多信息

如果您不知道如何使用自动版式,建议您将其关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM