2010-11-18 6 views
7

Einige Hintergrundinformationen: Ich wollte 3 Tasten auf einem UIToolBar haben. Ich schaffte es, den mittleren zu zentrieren und alles in eine UIToolBar selbst in eine UIView zu bringen.Ändern Sie die Größe eines UIBarButtonItem, wenn der Titel zu breit wird

Everythings sieht genauso aus, wie es sollte, wenn der Titel der mittleren Tasten zu groß wird. Es wird dann unter den linken oder rechten Tasten angezeigt.

Ich kann nicht die UIToolBar oder die UIBarButtonItems 's Breite erhalten, um die Größe ändern zu können, wenn sie zu groß sind. Das 'UIBarButtonItem' hat eine wirklich nette width Eigenschaft, die es mir erlauben würde, die Größe des Steuerelements zu ändern, wenn es zu groß ist. Aber ich kann nicht wissen, wann es zu groß ist!

EDIT: Ich habe den harten Weg am Ende getan. Ich berechne die Größe des Textes und vergleiche sie mit der maximalen Pixelgröße, die ich auf dem Gerät sah. Hässlich, aber es funktioniert.

+ (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; 
} 

Antwort

8

Setzen Sie eine flexible Leertaste zwischen den linken und rechten Tasten und der mittleren Taste; Dadurch können die Seitentasten nur so viel Breite aufnehmen, wie sie benötigen, und die mittlere Taste zentriert halten, während sie in den umgebenden Raum hineinwachsen kann.

Hier ein paar Screenshots von Interface Builder von etwas, das ich war an diesem Morgen arbeiten, die die Wirkung zeigt: die Doppelpfeile Weg IB sind die flexiblen Raum Artikel zeigen ...

Interface Builder screenshot showing toolbar with wide flexible spaces

... und das gleiche mit einem längeren Titel auf der mittleren Taste ...

Interface Builder screenshot showing toolbar with narrow flexible spaces

und hier ist die Symbolleiste mit kurzer und langer mittlerer Taste wie auf meinem iPh gesehen ein 3GS:

iPhone screenshot showing toolbar with wide flexible spaces

iPhone screenshot showing toolbar with narrow flexible spaces

+1

wenn Sie UIBarButtonItem Breite auf 0,0 eingestellt, passt es seine Breite automatisch, so dass es Es ist nicht notwendig, die Breite zu berechnen. Besonders nützlich bei lokalisierten Strings, die immer unterschiedliche Größe haben. –

2

Hier ist eine bessere Möglichkeit, die Textbreite zu finden:

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

    return [text sizeWithFont:font].width; 
} 
Verwandte Themen