#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);
}