objective-c - 当 NSTextField 大小发生变化时,NSScrollView 中的位置错误

标签 objective-c cocoa nsscrollview

我有一个从 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];

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

知道如何在发布时获得正确的位置吗?

最佳答案

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

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

如果您使用自动布局,则必须在添加字段后添加适当的约束。哦,请记住在添加文本字段之前将其 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 session 确实有助于理解它(需要密码):

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

关于objective-c - 当 NSTextField 大小发生变化时,NSScrollView 中的位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052971/

相关文章:

ios - clang : error: linker command failed: duplicate symbols for architecture x86_64

objective-c - 如何在 osx 中的 NSDatePicker 对象上设置当前日期

objective-c - 透明UIView的渲染是免费的吗?

ios - 为 UISlider 设置 ThumbImage 含糊不清

cocoa - 从自定义 WebKit 浏览器 View 启动新的浏览器窗口

cocoa - 如何防止 NSButton 在禁用时注册按下操作?

swift - 以编程方式将 NSScrollView 滚动到右侧

cocoa - 如何在 NSScrollView 的弹性部分绘制背景?

swift - 当 NSCollectionView 滚动到内容末尾时加载更多数据 (macOS)

ios - 带有 UIImageView 的自定义 UITableViewCell 不加载某些单元格的图像