2015-03-02 4 views
4

Хотите изменить выравнивание метки html. Ничего не работает. Я не вижу CSS в HTML. Дальнейших настроек изменения юстировки нет. Я также установил выравнивание слева непосредственно на UILabel. Что мне не хватает?NSAttributedString выравнивание не работает над содержимым html

Код указан в расширении UILabel.

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
paragraphStyle.alignment = NSTextAlignmentLeft; 

NSDictionary *attr = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding), NSParagraphStyleAttributeName: paragraphStyle}; 
NSError *error = nil; 

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithData:[html dataUsingEncoding:NSUTF8StringEncoding] options:attr documentAttributes:nil error:&error]; 

// also tried with this 
[attributedText addAttribute:NSParagraphStyleAttributeName value:paragraphStyle 
          range:NSMakeRange(0, html.length) 
    ]; 

self.attributedText = attributedText; 

Редактировать

Итак, я создал отдельный проект и там, текст выравнивается по левому краю, по умолчанию. Я должен выяснить, почему в приведенном выше примере текст выглядит оправданным. В любом случае основная проблема остается, я не могу изменить выравнивание по умолчанию. Он работает при инициализации присваиваемой строки initWithString. Но в этом случае html не работает. Когда initWithData, как и в приведенном выше примере, html работает, но выравнивание не работает.

Запустите этот фрагмент, и вы увидите.

UILabel *label = [[UILabel alloc] init]; 
label.frame = CGRectMake(50, 50, 300, 400); 
label.backgroundColor = [UIColor yellowColor]; 
label.numberOfLines = 0; 
label.textAlignment = NSTextAlignmentRight; 

NSString *text = @"sfsf sldjfs fj <b>dsfjslf</b> dsfslkf jsfsfjsdkfsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkfll END"; 

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
paragraphStyle.alignment = NSTextAlignmentRight; 

UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:14]; 
NSDictionary *attr = @{ 
         NSFontAttributeName: font, 
         NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
         NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding), 
         NSParagraphStyleAttributeName: paragraphStyle}; 
NSError *error = nil; 

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithData:[text dataUsingEncoding:NSUTF8StringEncoding] options:attr documentAttributes:nil error:&error]; 

[attributedText addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attributedText.length)]; 

NSLog(@"err: %@", error); 

label.attributedText = attributedText; 

[self.view addSubview:label]; 

Edit 2:

Случай 1 - решил - я где-то в конце выравнивания кода вносятся изменения. Не видел этого.

Дело 2 - решена - см. Ответ.

+0

@ Ixx это работает –

ответ

3

Вопрос заключается в том, что, как сказано в docinitWithData:options:documentAttributes:error: принимают только 3 клавиши: с-плюсом NSDocumentTypeDocumentAttribute, NSCharacterEncodingDocumentAttribute и NSDefaultAttributesDocumentAttribute.

Затем, с вашим фрагментом, вы не применили NSParagraphStyleAttributedName в конце, как в предыдущей попытке.

Итак, с вашего сниппета, я ставлю эту строку вместо:

[attributedText addAttribute:NSParagraphStyleAttributeName 
         value:paragraphStyle 
         range:NSMakeRange(0, attributedText.length)]; 

И удалили 2 бесполезен приписывали из attr:

NSDictionary *attr = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
         NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}; 
1

Ну, я нашел решение. Я предполагаю, что выравнивание не работает, потому что оно ожидает таких атрибутов в html. Так что я добавил его в HTML:

text = [@"<style> p {text-align: right;}</style><body>" stringByAppendingFormat:@"<p>%@</p></body>", text]; 

Работает с центром, слева и т.д.

Смежные вопросы