我在窗口视图中有一个NSTextField。
我已尝试过所有IB选项,但我似乎无法实现以下目标:
NSTextField中有一个很长的句子 - 当Window调整为更窄的宽度时,NSTextField也会变窄 - 这会将文本推到下一行。但是,任何被推到NSTextField底部下方的文本都会被截断。我希望NSTextField能够垂直扩展其大小以适应更高的文本。
这可以自动完成,还是应该观察Window resize事件并重新计算NSTextField的高度?
我需要支持10.7和10.8并尝试使用Autolayout和Autoresizing,但无济于事。
编辑 - 这是根据Jerry的答案(以及他在Github上的类别)工作的代码:
-(void)setFrame:(NSRect)frameRect{
NSRect myFrame = CGRectMake(frameRect.origin.x, frameRect.origin.y, frameRect.size.width, [self.stringValue heightForWidth:frameRect.size.width attributes:nil]);
[super setFrame: myFrame];
}
答案 0 :(得分:2)
Autolayout的运营水平更高。我认为你需要调整文本字段的大小。
您可以尝试将-sizeToFit发送到文本字段,但这可能会水平扩展而不是垂直扩展。因此,如果这不起作用,请查看NS(Attributed)String+Geometrics category中的-heightForWidth ::方法。使用此方法,您可以继承NSTextField并覆盖-sizeToFit以垂直扩展。将调整大小合并到setFrame:和setStringValue中可能会很酷:因此它总是保持适当的高度。
Autolayout应该从那里接管,根据需要移动和调整兄弟子视图的大小。
答案 1 :(得分:0)
使用此子类在宽度更改时展开高度:
@interface MyTextField : NSTextField
@property (nonatomic, assign) BOOL insideDeepCall;
@end
@implementation MyTextField
- (void)layout
{
[super layout];
if (!self.insideDeepCall) {
self.insideDeepCall = YES;
self.preferredMaxLayoutWidth = self.frame.size.width-4;
[self.superview layout];
self.insideDeepCall = NO;
}
}
@end