2

我有一个简单NSScrollView的从 IB 创建的。我从我的 .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];

不幸的是,在我第一次吃午饭时,文本字段不在正确的位置(但 documentView 中的其他元素是的),并且只有在我调整窗口大小时位置才是正确的。

知道如何在发布时拥有正确的位置吗?

4

2 回答 2

0

我找到了解决方案,只需添加...:

[dateTextField setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable | NSViewMaxXMargin | NSViewMaxYMargin | NSViewMinXMargin | NSViewMinYMargin];
于 2012-06-18T15:15:51.777 回答
0

您没有说明您的目标是哪个版本的 OS X,如果是 Lion,您是否使用自动布局或传统的弹簧和支柱。

如果您使用弹簧和支柱(自动调整大小的蒙版),那么您应该在添加之前或之后在文本字段上设置一个框架。

如果您使用自动布局,则必须在添加字段后添加适当的约束。哦,记得 在添加之前translatesAutoresizingMaskIntoConstraints将文本字段的属性设置为NO- 否则它会添加自己的约束,这会干扰您添加的约束。根据我的经验,添加自己的显式约束比依赖自动生成的约束要好得多。

这里有一些关于布局约束的好文档:

https://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/Introduction.html

http://developer.apple.com/library/mac/#releasenotes/UserExperience/RNAutomaticLayout/_index.html#//apple_ref/doc/uid/TP40010631

去年的 WWDC 会议确实有助于理解它(需要密码):

https://developer.apple.com/videos/wwdc/2011/?id=103

于 2012-06-17T13:13:49.597 回答