Как центрировать строку HTML как по горизонтали, так и по вертикали в UIWebView

#html #ios #css #objective-c

#HTML #iOS #css #objective-c

Вопрос:

Я получаю строку HTML в формате UTF-8, и мне нужно отобразить ее в WebView. Но я хочу, чтобы строка была центрирована как по горизонтали, так и по вертикали в UIWebView

Ответ №1:

Ну, я протестировал и разработал рабочее решение. Ну, вот как я добился желаемого результата. Ну, функция calculateHeight написана мной. Я сталкивался с разными решениями, но ни одно из них не дало желаемого решения для вертикального центрирования. Метод calculateHeight возвращает общую высоту NSAttributedString, которая будет сгенерирована при преобразовании текста HTML в NSAttributedString. Это значение высоты дополнительно используется для центрирования текста по вертикали путем предоставления требуемого заполнения.

     //subCatTexts.text contains the HTML String
     NSString *myHTML = [NSString stringWithFormat:@"<!DOCTYPE html><html><head><style>.center 
{padding: %fpx 0;border: 0px solid green;text-align: center;}</style></head><body><div class="center"><p>%@</p></div></body>
</html>",self.webView.frame.size.height/2.0-[self calculateHeight:subCatTexts.text],subCatTexts.text];
        [_webView loadHTMLString:myHTML baseURL:nil];
  

Используемая функция определена здесь

 - (float) calculateHeight:( NSString *)html
{
    const char *c = [html cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:c length:strlen(c)];
    NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSAttributedString *attributedString = [[NSAttributedString alloc]
                                                initWithData: [string dataUsingEncoding:NSUnicodeStringEncoding]
                                                options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
                                                documentAttributes: nil
                                                error: nil
                                                ];


   //-------------Calculating the height of the attributed String-----

   CGFloat width = self.view.frame.size.width; // whatever your desired width is
   CGRect rect = [attributedString boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
   return (rect.size.height);
}