1

我以UIView编程方式创建了一个嵌入多个UIControls(主要是UIButtons、UISwitchs 和UILabels)的程序。我在-(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
    */

}

然后在我的视图控制器中有一个外部按钮的事件处理程序;操作是将上述自定义视图添加到UIView使用 Xcode 中的 Storyboard Interface Builder 创建的空白中。

代码如下:

-(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 开发的新手 :(

感谢您的建议

4

1 回答 1

1

方法 translatesAutoresizingMaskIntoConstraints = YES 表示 UIView 正在使用 Auto Layout。

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

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

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

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

于 2013-11-13T11:26:18.550 回答