我有一个从IB创建的简单NSScrollView
。
我将它与我的.h文件链接起来,这是一个IBOutlet
:
IBOutlet NSScrollView *scroller;
在我的.m中,我以编程方式插入NSTextField
,如下所示:
NSTextField *dateTextField = [[NSTextField alloc]initWithFrame:NSMakeRect(30,yPos - kBreakHeight - 15, 100, kBreakHeight)];
[dateTextField setBordered:NO];
[dateTextField setEditable:NO];
[dateTextField setBackgroundColor:[NSColor clearColor]];
[dateTextField setAlignment:NSLeftTextAlignment];
[dateTextField setFont:[NSFont fontWithName:kAppFontBold size:11]];
[dateTextField setTextColor:[NSColor colorWithCalibratedRed:33/255.0 green:33/255.0 blue:33/255.0 alpha:1]];
[dateTextField setStringValue:dateString];
[[scroller documentView] addSubview:dateTextField];
不幸的是,在我的视图的第一个午餐时,文本字段不在正确的位置(但是文档中的其他元素查看是),并且只有在我调整窗口大小时位置才是正确的。
知道如何在发布时获得正确的位置吗?
答案 0 :(得分:0)
您没有说明您要定位的OS X版本,以及是否为Lion,无论您使用自动布局还是传统弹簧和支柱。
如果你使用弹簧和支柱(自动调整遮罩),那么你应该在添加它之前或之后在文本字段上设置一个框架。
如果使用自动布局,则必须在添加字段后添加适当的约束。哦,记得在添加之前将文本字段的translatesAutoresizingMaskIntoConstraints
属性设置为NO
- 否则它会添加自己的约束,这些约束会干扰您添加的约束。根据我的经验,添加自己的显式约束比依赖自动生成的约束要好得多。
这里有一些关于布局约束的好文档:
去年的WWDC会议确实有助于理解它(需要密码):
答案 1 :(得分:0)
我找到了解决方案,只需添加......:
[dateTextField setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable | NSViewMaxXMargin | NSViewMaxYMargin | NSViewMinXMargin | NSViewMinYMargin];