无法在NSView下自动调整NSTextField的大小(作为菜单项)

时间:2011-03-13 14:34:17

标签: text height nsview nstextfield

我是一个经验不足的用户,他试图通过简单的项目创建过程来学习...我请求您的帮助,因为我现在还没有找到一个可行的解决方案,整整两天,挖掘Xcode帮助和谷歌。

我有一个简单的MacOS X(10.6.x)应用程序,可以在XIB状态栏菜单中创建(代码内)额外的NSMenuItem。在我的AppDelegate上,我创建了一个加载NSView的对象(来自MainMenu.xib):

// Add menu entry for NSView object
NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"Placeholder"
                                        action:nil
                                        keyEquivalent:@""];
[newItem setView:theView];
[newItem setEnabled:NO];
[newItem setTarget:self];
[calendarMenu insertItem: newItem atIndex:0];
[newItem release];

在我的MainMenu.xib中,除了菜单结构之外,我还有另一个对象设置为NSView,在它下面,NSTextField(占据视图的所有空间)。菜单似乎加载了视图窗口。

稍后,我将一些字符串设置为NSTextField,但我无法相应地调整高度;它要么太多,要么是庄稼:

// Crop last newline character
NSString *menuCelebrations = [NSString stringWithString:
        [celebName substringToIndex:([celebName length] - 1)]];
NSFont *msgFont = [NSFont menuBarFontOfSize:12.0];

// Set attributes
[theTextField setFont:msgFont];
[theTextField setStringValue:menuCelebrations];

顶部菜单现在显示我想要的更长的文字,包裹等。但是我无法正确调整高度:

theView setFrame: NSMakeRect([theView frame].origin.x,
            [theView frame].origin.y,
            calendarMenu.size.width,
            newHeightFloat)];

作为一个新手,我尝试过这样的东西来自动调整大小,但显然无济于事:

[theTextField sizeToFit];
[theTextField autoresizesSubviews];
[theView setAutoresizingMask:NSViewHeightSizable];
[theView setNeedsDisplay:YES];

不用说我在Interface Builder中尝试了很多属性组合(其中文本字段随视图等调整大小)。什么都行不通......我仍然无法找到一种方法来计算并设置高度到NSView或NSTextFieled这个子对象。

我在www.stackoverflow.comwww.cocoabuilder.com找到了想法和代码,但人们提到了Apple在文档中某处建议的NSLayoutManager,NSTextStorage和NSTextContainer的使用(查找章节/参考“计算文本高度) “它有一些代码,但未能实现);其他人建议Apple计算方框,但渲染该方框确实错过了底部的一些像素。

对于Matt Neuburg的工作(而不是Apple建议的NSLayout)进行正确计算(使用示例项目)的reference似乎在NSTextView对象上运行良好...

我必须为此NSView创建一个单独的/自定义类吗?我应该更喜欢NSTextView到NSTextField吗?

有没有人设法将高度(仅限)调整到合适的尺寸?我肯定会感谢代码示例的一些帮助。

在没有正确理解的方法的情况下挖掘太深了吗?

0 个答案:

没有答案