Проблем с подчертаването

Опитвам се да добавя подчертаване към приписан текст с помощта на персонализиран шрифт (HelveticaRounded-Bold). И все пак, подчертаването има проблеми както на симулатора, така и на устройството. Като този:

въведете описание на изображението тук

Това е UILabel, но мога да възпроизведа проблема и в UITextView. Изглежда, че програмата за изобразяване на текст погрешно изчислява къде да начертае долната линия на някои редове.

Голият код:

- (void)viewDidLoad {
  [super viewDidLoad];
  UIFont *font = [UIFont fontWithName:@"HelveticaRounded-Bold" size:18];
  self.label.font = font;
  self.label.numberOfLines = 0;
  NSDictionary *attributes = @{ NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle) };
  self.label.attributedText = [[NSAttributedString alloc] initWithString:@"This is a test. And the test has failed. What did I do to deserve this? Why NSUnderlineStyleAttributeName? Why?"
                                                              attributes:attributes];
}

Забавен факт: подчертаването не се сблъсква при размер 24 или по-висок (!). Той също така не възпроизвежда с помощта на TTTAttributedLabel.

Някаква идея какво може да се случва тук?


person hpique    schedule 16.03.2015    source източник
comment
Виждам и този проблем. Намерихте ли решение за това?   -  person lagouyn    schedule 20.05.2015
comment
Опитах шрифт, за който знам, че е проблематичен в това отношение, в TextEdit на Apple и проблемът възниква и там. Лош шрифт, чудя се?   -  person lagouyn    schedule 21.05.2015


Отговори (2)


Изглежда, че това е проблем на устройства без ретина при използване на NSUnderlineStyleThick. Превключването към NSUnderlineStyleSingle изглежда решава проблема. Така че можете да зададете условие за устройства без ретина да използват NSUnderlineStyleSingle, ако искате да запазите NSUnderlineStyleThick на други устройства.

Редактиране: Току-що разбрах, че използвате NSUnderlineStyleSingle във вашия примерен код :/ В моя код това работи за дадения ми шрифт/размер, който е просто системен шрифт. Това реши проблема от моя страна. Така че изглежда, че тази корекция може да не е универсална, но работи в моя случай.

person Four    schedule 12.07.2016

Имах същия проблем за UIButton на дисплей без ретина. Това, което направих, е, че току-що промених „NSUnderlineStyleSingle“ на „NSUnderlineStyleDouble“ за устройства без ретина.

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:titleString?titleString:@"" attributes:@{ NSFontAttributeName: button.titleLabel.font}];

[buttonTitleString addAttribute:NSUnderlineStyleAttributeName value:[CommonUtil getValueForUnderlineStyle] range:NSMakeRange(0, [buttonTitleString length])];
[button.titleLabel setAttributedText:attributedString];

+ (NSNumber *)getValueForUnderlineStyle {
NSNumber *numberToReturn = @(NSUnderlineStyleSingle);
if(!(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [UIScreen mainScreen].scale > 1)) {
    // Non Retina iPad
    numberToReturn = @(NSUnderlineStyleDouble);
}
return numberToReturn;
}
person AtB    schedule 03.10.2018