CMS-Jack
Blog
Blog - 
Jürgen Furrer

Wer schon mal eine iPhone-App programmieren wollte kennt das Problem bestimmt:

Der View UILabel hat keine Methode oder ein property um den Text vertikal auszurichten. Das ist gerade beim TableView ein Problem, da teilweise das Label zweizeilig ist und teilweise einzeilig, das ist dann nicht wirklich schön anzusehen.

Nach langem suchen habe ich dann endlich die Lösung gefunden, ein Plugin für UILabel

Zuerst erstellt man eine neu Klasse mit dem Namen VerticalAlign in XCODE (Ergibt zwei Dateien)

VerticalAlign.h und VerticalAlign.m

Und kopiert folgenden Code in die Klasse:

//  VerticalAlign.h

#pragma mark VerticalAlign

@interface UILabel (VerticalAlign)
- (void)alignTop;
- (void)alignBottom;
@end

 

//  VerticalAlign.m

@implementation UILabel (VerticalAlign)

- (void)alignTop {
    CGSize fontSize = [self.text sizeWithFont:self.font];
    double finalHeight = fontSize.height * self.numberOfLines;
    double finalWidth = self.frame.size.width;    //expected width of label
    CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
    int newLinesToPad = (finalHeight  - theStringSize.height) / fontSize.height;
    for(int i=0; i<newLinesToPad; i++) {
        self.text = [self.text stringByAppendingString:@"\n "];
    }
}

- (void)alignBottom {
    CGSize fontSize = [self.text sizeWithFont:self.font];
    double finalHeight = fontSize.height * self.numberOfLines;
    double finalWidth = self.frame.size.width;    //expected width of label
    CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
    int newLinesToPad = (finalHeight  - theStringSize.height) / fontSize.height;
    for(int i=0; i<newLinesToPad; i++) {
        self.text = [NSString stringWithFormat:@" \n%@",self.text];
    }
}
@end

Nachdem man die neue Klasse in seinem Projekt eingebunden hat:

#import "VerticalAlign.h"

kann man sein Label mit den neuen Methoden vertikal ausrichten:

    UILabel *customerLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 1, 150, 50)];
    customerLabel.text = @"to short for 2 lines";
    customerLabel.numberOfLines = 2;
    customerLabel.lineBreakMode = UILineBreakModeWordWrap;
    [customerLabel alignTop];
Tags: iphone, sdk, ios, xcode
Aufrufe:1079