Вы можете создать подкласс UILabel и переопределить метод drawRect:
- (void)drawRect:(CGRect)rect {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(ctx, 207.0f/255.0f, 91.0f/255.0f, 44.0f/255.0f, 1.0f); // RGBA
CGContextSetLineWidth(ctx, 1.0f);
CGContextMoveToPoint(ctx, 0, self.bounds.size.height - 1);
CGContextAddLineToPoint(ctx, self.bounds.size.width, self.bounds.size.height - 1);
CGContextStrokePath(ctx);
[super drawRect:rect];
}
UPD:
Начиная с iOS 6 Apple добавила поддержку NSAttributedString для UILabel, так что теперь это намного проще и работает для нескольких строк:
NSDictionary *underlineAttribute = @{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)};
myLabel.attributedText = [[NSAttributedString alloc] initWithString:@"Test string"
attributes:underlineAttribute];
Если вы по-прежнему хотите поддерживать iOS 4 и iOS 5, я рекомендую использовать TTTAttributedLabel вместо подчеркивания метки вручную. Однако, если вам нужно подчеркнуть UILabel в одну строку и вы не хотите использовать сторонние компоненты, приведенный выше код все равно поможет.