Xcode Interface Builder问题
我个人不喜欢界面生成器在Xcode中的工作方式。在这个例子中,我试图创建一个相当复杂的视图控制器。在视图控制器的viewDidLoad上,显示一个自定义警报视图(如此)。它实际上不是警报视图,而是更多向用户显示一些信息的视图。我有一个暗淡的背景视图,并在此之上。如果我尝试在界面生成器中创建此视图,它将变得过于复杂,因为您无法在后台选择视图并移动它们,而不会将子视图放到错误的视图中,依此类推...

情境
我想做的是创建一个包含一些标签和一个按钮的视图。基于此的视图控制器具有难度属性,它将在标签/标签数量中具有不同的文本。
即容易-3个标签
硬-4个标签

我像这样创建dimmedView和alert(styled)View:

// Setup the dimmedView
UIView *dimmedView = [[UIView alloc] initWithFrame:self.view.frame];
dimmedView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];

// Setup the startingAlertView
UIView *startingAlertView = [[UIView alloc] init];
startingAlertView.backgroundColor = [UIColor whiteColor];


然后,我根据某些逻辑创建三个/四个标签,并根据逻辑将必要的标签添加到startingAlertView中。

显而易见的问题是,没有为视图设置框架。这意味着它将返回0,0,0,0。我想做的是根据添加的标签采取所需高度的视图。

我正在为IOS7构建并使用自动布局。我是否应该设置约束,然后可能会调整视图中的相关高度和位置?

最佳答案

我正在为IOS7构建并使用自动布局。我是否应该设置约束,然后可能会调整视图中的相关高度和位置?


是。您不必在自动版面设计下使用initWithFrame:,而是可以使用,但是框架将被忽略。使用CGRectZero框架创建调光视图,将translatesAutoresizingMasksToConstraints设置为NO,将其添加到主视图,并创建将其固定到超级视图所有边缘的约束。

然后,添加您的警报视图,再次使用零帧并将translates...属性设置为NO。创建约束以使此视图在调光视图中居中。由于标签具有固有大小,因此该视图将从其子视图获取其大小。

将标签添加为该视图的子视图,并且框架为零且translates...设置为NO。根据其内容,您可能希望设置首选的最大布局宽度或宽度约束。

创建约束,将标签固定在父视图的左右边缘,并将标签排列在垂直的“堆栈”中。在每种情况下,您都可以添加填充以使您的警报有些边界。

这看起来像是大量的代码,因此您可能需要阅读我在visual format for auto layoutcreating constraints in code上撰写的文章以及相关的autolayout convenience category,以使您的生活更轻松。

10-08 08:51
查看更多