我是来自Java / C#和C / C ++的cocoa / objective-C的新手。可可一直给我带来很多麻烦。我在可可中读过一篇关于View层次结构的苹果文章。但仍然存在困惑。
我需要知道何时以编程方式向视图添加子视图而不是通过界面构建器。假设在同一父视图中有其他子视图,视图的确切位置将相对于其他子视图。
在java中有布局管理器,在C#中还有垂直/水平面板等,所以我们知道如果我添加一个项目/控件它将会到达现有项目的右侧或者它的底部。 / p>
因此,如果我按照以下行所示,确切地确定了新子视图的放置位置?
[[window contentView] addSubview:newView];
谢谢,
答案 0 :(得分:3)
视图的框架定义了它在超视图坐标中占据的矩形,因此它的位置将为frame.origin
。这可以在添加子视图之前或之后设置。
View Programming Guide中明确说明了这一点。
答案 1 :(得分:2)
这取决于您是否使用Autolayout。
如果不是,则在创建视图时调用 - [NSView initWithFrame:(NSRect)frame],该帧将定义视图在superview坐标中的显示位置。
_view = [[NSTextField alloc] initWithFrame:NSMakeRect (50, 50, 100, 50)];
将使NSTextField大小为100x50,它将在superview中放置50,50像素。
如果您使用的是Autolayout,那么视图的位置完全取决于适用于它的布局约束。使用Autolayout时,您设置的任何帧都将被忽略。虽然自动布局具有陡峭的学习曲线,但一旦设置了约束,它(理论上)意味着您可以忽略布局。
答案 2 :(得分:1)
frame
矩形在超视图中显示视图的大小和位置。框架位于0,0(x,y)位置,默认大小为0,0(w,h)。除非在极少数情况下(例如NSSplitView),否则子视图集合中的位置将被完全忽略。
答案 3 :(得分:1)
Cocoa不会自动对齐任何视图。没有像.net或java那样的初始布局机制 您必须通过以点为单位设置框架来手动定位所有视图 默认情况下,新初始化视图的原点位于(0,0)。
答案 4 :(得分:0)
AFAIK,文档和头文件没有准确指定添加的子视图将被放置的原点(x,y)。添加子视图后我要做的是在使用CGRectMake()重新定位子视图之前计算新的原点(如果适用)大小。