自动调整NSButton的大小以适应以编程方式更改的文本(Xcode)
我有一个NSButton(按钮),在Interface Builder/Xcode中内置了一些临时标题文本。在其他地方,按钮内的标题文本以编程方式更改为未知长度的字符串(实际上,多次更改为许多不同的长度)自动调整NSButton的大小以适应以编程方式更改的文本(Xcode),xcode,cocoa,macos,interface-builder,nsbutton,Xcode,Cocoa,Macos,Interface Builder,Nsbutton,我有一个NSButton(按钮),在Interface Builder/Xcode中内置了一些临时标题文本。在其他地方,按钮内的标题文本以编程方式更改为未知长度的字符串(实际上,多次更改为许多不同的长度) 我希望自动调整按钮的大小(具有固定的右侧位置——因此它会向左延伸),以适应以编程方式插入为按钮文本的字符串的长度。但我想不出来。有什么建议吗?提前谢谢 当然!就用吧!:) 如果您不能按照@jtbandes的建议使用自动布局(它仅在Lion中可用),那么您可以在设置其字符串值后调用[button
我希望自动调整按钮的大小(具有固定的右侧位置——因此它会向左延伸),以适应以编程方式插入为按钮文本的字符串的长度。但我想不出来。有什么建议吗?提前谢谢 当然!就用吧!:) 如果您不能按照@jtbandes的建议使用自动布局(它仅在Lion中可用),那么您可以在设置其字符串值后调用
[button sizeToFit]
,这将使按钮调整大小以适应其字符串。然后需要根据新的宽度调整其框架
您无法自动执行此操作,但在NSButton
的子类中执行此操作很容易
@implementation RKSizeToFitButton
- (void)setStringValue:(NSString*)aString
{
//get the current frame
NSRect frame = [self frame];
//button label
[super setStringValue:aString];
//resize to fit the new string
[self sizeToFit];
//calculate the difference between the two frame widths
NSSize newSize = self.frame.size;
CGFloat widthDelta = newSize.width - NSWidth(frame);
//set the frame origin
[self setFrameOrigin:NSMakePoint(NSMinX(self.frame) - widthDelta, NSMinY(self.frame))];
}
@end
这样,您只需在Interface Builder中将按钮的类设置为
RkizeToFitButton
,然后在按钮上调用setStringValue:
,更改其标签即可“正常工作”,无需额外代码。My fault;我应该说得更清楚些。如何在10.6(及更早版本)中实现此功能?@jtbandes如何使用autolayout实现此功能?@Jai启用autolayout后,按钮将自动尝试正确大小。你只需要告诉它还有什么地方——在OP的例子中,这意味着要约束它的右(后缘)边缘和superview对齐。。这就是我被困的地方。如果按钮的右后缘与其superview对齐,按钮是否会随着superview的大小而增长。我想知道如何将按钮设置为文本大小。抱歉,如果我没有正确理解,如果按钮的右边缘与superview对齐,但左边缘未受限制,则它将适合其文本大小并保持右对齐。该方法的更合适名称为SetString GValueandSizeToFit:
。当然,但是我预计子类将被称为类似RKSizeToFitButton
的东西,并且您根本不需要更改代码,它将成为NSButton
的替代品。毕竟,OP需要一种自动的方法来实现这一点。