William Jockusch
William Jockusch

Reputation: 27335

UITextField underlines from NSAttributedString are only 1 pixel high?

The label (bottom of the picture) and the text field (top) have the same same attributedText. But look at the underlines. The ones in the text field are only one pixel high. This looks terrible. Does anyone know what is causing this or how to prevent it?

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UITextField* textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 100, 600, 200)];
        NSMutableAttributedString* string = [[NSMutableAttributedString alloc]initWithString:@"The quick brown fox jumps"];
        NSNumber* underlineNumber = [NSNumber numberWithInteger:NSUnderlineStyleSingle];
        UIFont* font = [UIFont systemFontOfSize: 50];
        [string addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, string.length)];
        for (NSInteger i=0; i<20; i++) {
            if (i%3==0) {
                [string addAttribute:NSUnderlineStyleAttributeName value:underlineNumber range:NSMakeRange(i, 1)];
            }
        }
        textField.backgroundColor = [UIColor whiteColor];
        textField.attributedText = string;
        [self addSubview:textField];
        UILabel* label = [[UILabel alloc]initWithFrame:CGRectMake(100, 400, 600, 200)];
        label.attributedText = string;
        label.font = font;
        label.backgroundColor = [UIColor whiteColor];
        [self addSubview:label];
    }
    return self;
}

enter image description here

Upvotes: 1

Views: 4463

Answers (1)

Ian Baird
Ian Baird

Reputation: 728

The label uses a custom rendering style to draw the underline which is unfortunately distinct from the one used by UITextField, which uses WebKit to render when editing and Core Text to render when it's static. Please file a bug with bugreporter.apple.com. Thanks!

Upvotes: 4

Related Questions