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];
Aufrufe:1079

