我是一个经验不足的用户,他试图通过简单的项目创建过程来学习...我请求您的帮助,因为我现在还没有找到一个可行的解决方案,整整两天,挖掘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.com和www.cocoabuilder.com找到了想法和代码,但人们提到了Apple在文档中某处建议的NSLayoutManager,NSTextStorage和NSTextContainer的使用(查找章节/参考“计算文本高度) “它有一些代码,但未能实现);其他人建议Apple计算方框,但渲染该方框确实错过了底部的一些像素。
对于Matt Neuburg的工作(而不是Apple建议的NSLayout)进行正确计算(使用示例项目)的reference似乎在NSTextView对象上运行良好...
我必须为此NSView创建一个单独的/自定义类吗?我应该更喜欢NSTextView到NSTextField吗?
有没有人设法将高度(仅限)调整到合适的尺寸?我肯定会感谢代码示例的一些帮助。
在没有正确理解的方法的情况下挖掘太深了吗?