2

我是来自 Java/C# 和 C/C++ 的 cocoa /objective-C 的新手。可可一直让我很头疼。我已经阅读了一篇关于可可视图层次结构的苹果文章。但还是有困惑。

我需要知道何时以编程方式而不是通过界面生成器将子视图添加到视图中。假设在同一个父视图中有其他子视图,视图将相对于其他子视图放置在哪里。

在 java 中有布局管理器,在 C# 中还有垂直/水平面板等,所以我们知道如果我添加一个项目/控件,它将位于现有项目的右侧或底部。

因此,如果我按照以下行所示进行操作,究竟是什么决定了新子视图的放置位置?

    [[window contentView] addSubview:newView];

谢谢,

4

5 回答 5

3

视图的框架定义了它在其父视图坐标中占据的矩形,因此它的位置将是frame.origin. 可以在添加子视图之前或之后设置。

这在View Programming Guide中有相当清楚的说明。

于 2013-02-11T07:34:51.533 回答
2

这取决于您是否使用自动布局。

如果你不是,那么当你创建一个视图时,你调用 -[NSView initWithFrame:(NSRect)frame] 并且该框架将定义视图在超级视图坐标中出现的位置。

_view = [[NSTextField alloc] initWithFrame:NSMakeRect (50, 50, 100, 50)];

将使 NSTextField 大小为 100x50,并将放置在超级视图内 50,50 像素。

如果您使用 Autolayout,则视图的位置完全取决于对其应用的布局约束。使用自动布局,您设置的任何框架都将被忽略。虽然自动布局有一个陡峭的学习曲线,但一旦你设置了约束,它(理论上)意味着你可以忽略布局。

于 2013-02-12T06:49:15.463 回答
1

Cocoa 不会自动对齐任何视图。没有像 .net 或 java 那样的初始布局机制。
您必须通过将它们的框架设置为点来手动定位所有视图。
默认情况下,新初始化视图的原点位于 (0,0)。

于 2013-02-11T07:35:23.797 回答
1

矩形给出了视图在frame父视图中的大小和位置。框架位于位置 0,0 (x,y),默认大小为 0,0 (w,h)。子视图集合中的位置被完全忽略,除非在极少数情况下,如 NSSplitView。

于 2013-02-11T07:34:11.970 回答
0

AFAIK,文档和头文件没有准确指定添加的子视图将放置的原点(x,y)。添加子视图后我要做的是在使用 CGRectMake() 重新定位子视图之前计算新的原点(如果适用)大小。

于 2013-02-11T07:28:08.303 回答