标题变得太宽时调整UIBarButtonItem的大小

时间:2010-11-18 13:53:37

标签: iphone

一些背景:我希望在UIToolBar上有3个按钮。我设法通过将UIToolBar本身放入UIView将中间的一个放在中心位置。

除了中间按钮的标题太大之外,Everythings看起来应该是这样。 然后它会显示在左侧或右侧按钮下。

我无法获得UIToolBarUIBarButtonItems的宽度,以便在它们太大时能够调整它们的大小。 'UIBarButtonItem'有一个非常好的width属性,如果它太大,我可以调整控件的大小。 但我不知道它什么时候太大了!

编辑:我最终做了很多努力。我计算文本的大小,并将其与我在设备上看到的最大像素大小进行比较。丑陋但它有效。

+ (CGFloat)calculateTextWidth:(NSString *)text
{
    CGSize fullSize = [UIScreen mainScreen].applicationFrame.size;
    UIGraphicsBeginImageContext(fullSize);

    CGContextRef context = UIGraphicsGetCurrentContext();


    // calculate the text size
    CGContextSelectFont(context, "Helvetica", 17, kCGEncodingMacRoman);
    CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, -1.0));
    CGContextSetTextDrawingMode(context, kCGTextInvisible);

    // measure the text
    CGPoint initialTextPosition = CGContextGetTextPosition(context);
    CGContextShowTextAtPoint(context, 0, 0, [text cStringUsingEncoding:NSASCIIStringEncoding], text.length);
    CGPoint finalTextPosition = CGContextGetTextPosition(context);

    return finalTextPosition.x - initialTextPosition.x;
}

2 个答案:

答案 0 :(得分:8)

在左右按钮和中央按钮之间放置一个灵活的空格键按钮项;这将允许侧面按钮占据他们需要的宽度,并保持中心按钮居中,同时允许它生长到它周围的空间。

以下是Interface Builder的一些屏幕截图,其中显示了我今天早上正在研究的效果:双头箭头是IB展示灵活空间物品的方式......

Interface Builder screenshot showing toolbar with wide flexible spaces

...和中心按钮上的标题相同......

Interface Builder screenshot showing toolbar with narrow flexible spaces

这是我的iPhone 3GS上显示的带有短和长中心按钮的工具栏:

iPhone screenshot showing toolbar with wide flexible spaces

iPhone screenshot showing toolbar with narrow flexible spaces

答案 1 :(得分:2)

以下是查找文字宽度的更好方法:

+ (CGFloat)calculateTextWidth:(NSString *)text
{
    UIFont *font = [UIFont fontWithName:@"Helvetica" size:17];

    return [text sizeWithFont:font].width;
}