繁体   English   中英

在Cocoa View Hierarchy中,什么决定了subView的位置?

[英]In Cocoa View Hierarchy what determines the subView position?

我是来自Java / C#和C / C ++的可可/ objective-C的新手。 可可一直让我头疼。 我读过一篇关于可可中视图层次结构的苹果文章。 但是仍然很混乱。

我需要知道何时以编程方式向视图添加子视图而不是通过界面构建​​器。 假设同一父视图中还有其他子视图,则该视图相对于其他子视图的确切位置。

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

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

    [[window contentView] addSubview:newView];

谢谢,

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

这在“ 视图编程指南”中已经相当清楚地阐明了。

这取决于您是否使用自动版式。

如果不是,则在创建视图时调用 - [NSView initWithFrame:(NSRect)frame],该帧将定义视图在superview坐标中的显示位置。

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

将使NSTextField大小为100x50,它将在superview中放置50,50像素。

如果您使用的是Autolayout,那么视图的位置完全取决于适用于它的布局约束。 使用“自动布局”时,您设置的任何帧都将被忽略。 虽然自动布局具有陡峭的学习曲线,但一旦设置了约束,它(理论上)意味着您可以忽略布局。

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

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

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

暂无
暂无

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

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