在 iOS 7 或 8 的 Web 视图中使用不同的样式表

Posted

技术标签:

【中文标题】在 iOS 7 或 8 的 Web 视图中使用不同的样式表【英文标题】:Use different style sheets in web view on iOS 7 or 8 【发布时间】:2014-09-01 18:37:02 【问题描述】:

我有一个使用 WebView 来显示文本和图像的应用程序。在 ios 8 上,我已将边距和内边距设置为 0px 以正确布局 html 页面。但是要在 iOS 7 上正确查看,必须将边距和内边距设置为 4px。

我怎样才能拥有它,以便它具有两个 iOS 版本的两种不同格式。

我希望它在 iOS 8 上自动将填充和边距设置为 0px,在 iOS 7 上设置为 4px。这是我当前的样式表(在 NSString 中)。

   NSString *stylesheet=@"<html><head><style>body  margin: 0; padding: 0; h1font-weight:normal;font-family: HelveticaNeue-Thin; padding: 7px; margin-bottom: 3px;pfont-family: HelveticaNeue-Light; padding-top:0px; padding-left: 7px;paddin-right: 7px; margin-top:10px;imgcenter display: block; margin: 0 auto;bfont-weight:normal;font-family: HelveticaNeue-Medium;</style></head><body>";
    NSString *footer=@"</body></html>";

    [super viewDidLoad];
    NSString *fullURL = [NSString stringWithFormat:@"%@%@%@",stylesheet, self.SelectedProduct.content, footer];
   NSString *path = [[NSBundle mainBundle] bundlePath];
    NSURL *baseURL = [NSURL fileURLWithPath:path];
    [_webview loadHTMLString:fullURL baseURL:baseURL];

【问题讨论】:

是否可以使用 CSS 媒体查询来获得正确的效果?见stephen.io/mediaqueries 感谢您的帮助。虽然我使用不同的方法解决了问题,但您的链接有助于解决不同的问题。 【参考方案1】:

我已经设法使用 if 语句和检查系统版本来解决它。

这是工作代码

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

- (void)viewDidLoad

    if (SYSTEM_VERSION_LESS_THAN(@"8.0")) 
          NSString *stylesheet=@"<html><head><style>body  margin: 4px; padding: 4px; margin-top:0pxh1font-weight:normal;font-family: HelveticaNeue-Thin; padding: 7px; margin-bottom: 3px; padding-top:0px;pfont-family: HelveticaNeue-Light; padding-top:0px; padding-left: 7px;paddin-right: 7px; margin-top:10px;imgcenter display: block; margin: 0 auto;bfont-weight:normal;font-family: HelveticaNeue-Medium;</style></head><body>";
        NSString *footer=@"</body></html>";

        [super viewDidLoad];
        NSString *fullURL = [NSString stringWithFormat:@"%@%@%@",stylesheet, self.SelectedProduct.content, footer];
        NSString *path = [[NSBundle mainBundle] bundlePath];
        NSURL *baseURL = [NSURL fileURLWithPath:path];
        [_webview loadHTMLString:fullURL baseURL:baseURL];
    

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) 
          NSString *stylesheet=@"<html><head><style>body  margin: 0px; padding: 0px; margin-top:0pxh1font-weight:normal;font-family: HelveticaNeue-Thin; padding: 7px; margin-bottom: 3px; pfont-family: HelveticaNeue-Light; padding-top:0px; padding-left: 7px;paddin-right: 7px; margin-top:10px;imgcenter display: block; margin: 0 auto;bfont-weight:normal;font-family: HelveticaNeue-Medium;</style></head><body>";
        NSString *footer=@"</body></html>";

        [super viewDidLoad];
        NSString *fullURL = [NSString stringWithFormat:@"%@%@%@",stylesheet, self.SelectedProduct.content, footer];
        NSString *path = [[NSBundle mainBundle] bundlePath];
        NSURL *baseURL = [NSURL fileURLWithPath:path];
        [_webview loadHTMLString:fullURL baseURL:baseURL];
    

【讨论】:

以上是关于在 iOS 7 或 8 的 Web 视图中使用不同的样式表的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 和 7 上的视图框架不同

UIScrollView 框架在 iOS 8 和 iOS 7 上的大小不同

iOS 7 和 8 中 UITableViewCells 的自动布局指标不同

iOS 7 和 iOS 8 中动态 UITableViewCell 的高度是不可能的

iOS 7 和 iOS 8 中 UIImagepickercontroller 的相机视图上的状态栏重叠

iOS 7 和 iOS 8 上的不同帧高度