美文网首页
UIWebView 官方文档

UIWebView 官方文档

作者: 7890陈 | 来源:发表于2019-08-14 00:14 被阅读0次

    声明

    在应用程序中嵌入web内容的视图。
    @interface UIWebView : UIView
    iOS 2.0–12.0(Deprecated)(弃用)
    

    概述

    请注意
    在iOS 8及以后运行的应用程序中,使用WKWebView类而不是UIWebView。此外,如果呈现的文件不应该运行JavaScript,可以考虑将WKPreferences属性javaScriptEnabled设置为NO。

    重要的
    在iOS 10.0上或之后链接的iOS应用程序必须包含在其信息中。plist文件的使用说明键类型的数据,它需要访问,否则它将崩溃。要访问用户的照片数据,它必须包括NSPhotoLibraryUsageDescription和NSCameraUsageDescription。

    使用loadHTMLString:baseURL:方法开始加载本地HTML文件,或者使用loadRequest:方法开始加载web内容。使用stopLoading方法停止加载,并使用loading属性确定web视图是否正在加载过程中。
    如果允许用户在页面历史记录中来回移动,则可以使用goBack和goForward方法作为按钮的操作。使用canGoBack和canGoForward属性在用户无法在某个方向移动时禁用按钮。
    默认情况下,web视图自动将出现在web内容中的电话号码转换为电话链接。当手机链接被点击时,手机应用程序就会启动并拨号。要关闭此默认行为,请使用不包含UIDataDetectorTypePhoneNumber标志的UIDataDetectorTypes位字段设置dataDetectorTypes属性。
    还可以使用scalesPageToFit属性以编程方式设置web内容第一次在web视图中显示时的比例。然后,用户可以使用手势改变scale。
    如果想跟踪web内容的加载,请将委托属性设置为符合UIWebViewDelegate协议的对象。

    重要的
    你不应该在UIScrollView对象中嵌入UIWebView或UITableView对象。如果这样做,可能会导致意外的行为,因为这两个对象的触摸事件可能会混淆并被错误地处理。

    您可以使用Web Inspector轻松调试包含在UIWebView中的HTML、CSS和JavaScript。阅读调试iOS上的Web内容,了解如何为iOS配置Web检查器。阅读Safari Web Content Guide的其余部分,了解如何创建为iPhone和iPad上的Safari优化的Web内容。
    有关基本视图行为的信息,请参阅iOS视图编程指南。

    支持文件格式
    除了HTML内容,UIWebView对象还可以用来显示其他内容类型,如Keynote、PDF和Pages文档。然而,要在应用程序中实现对纯文本和富文本的最佳呈现,应该使用UITextView。

    国家保护
    在ios6及以后版本中,如果你给这个视图的restoration Identifier属性赋值,它会尝试保存它的URL历史,每个页面的缩放和滚动位置,以及当前正在查看的页面的信息。在恢复期间,视图将恢复这些值,以便web内容与以前一样显示。有关状态保存和恢复工作原理的更多信息,请参见App Programming Guide for iOS。
    有关外观和行为配置的更多信息,请参见Web视图。

    子类化的笔记
    UIWebView类不应该被子类化。

    响应Web视图更改

    接收方的委托。
    @property(nonatomic, assign) id<UIWebViewDelegate> delegate;
    // 讨论
    在加载内容时发送消息给委托。
    有关此委托可能实现的可选方法,请参见UIWebViewDelegate。
    // 重要的
    在释放一个UIWebView实例之前,你已经为它设置了一个委托,你必须首先将它的委托属性设置为nil。
    这可以在dealloc方法中实现。
    --------------------------------------------------------------------------------
    UIWebViewDelegate协议定义了一些方法,UIWebView对象的委托可以选择性地实现这些方法来在加载web内容时进行干预。
    @protocol UIWebViewDelegate
    // 重要的
    在释放一个UIWebView的实例之前,你已经为它设置了一个委托,你必须在处理UIWebView实例之前先将UIWebView委托属性设置为nil。
    这可以做到,例如,在dealloc方法中处理UIWebView。
    // 代理方法
    在web视图开始加载frame之前发送。
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
    (navigationType)启动加载请求的用户操作的类型。
    如果web view应该开始加载内容,YES;否则,NO。
    
    在web视图开始加载frame后发送。
    - (void)webViewDidStartLoad:(UIWebView *)webView;
    
    在web视图加载完frame后发送。
    - (void)webViewDidFinishLoad:(UIWebView *)webView;
    
    如果web视图未能加载frame,则发送。
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
    (error)加载过程中发生的错误。
    

    加载内容

    设置主页内容、MIME类型、内容编码和基本URL。
    - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
    // data
    主页的内容。
    // MIMEType
    内容的MIME类型。
    // encodingName
    在utf-8或utf-16中编码名称的IANA。
    // baseURL
    内容的baseURL。
    --------------------------------------------------------------------------------
    设置主页内容和baseURL。
    - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
    // 讨论
    为了帮助您避免受到安全攻击,请确保使用此方法加载本地HTML文件;不要使用loadRequest:。
    --------------------------------------------------------------------------------
    通过发起异步客户机请求连接到给定的URL。
    - (void)loadRequest:(NSURLRequest *)request;
    // 讨论
    不要使用此方法加载本地HTML文件;相反,使用loadHTMLString: baseURL:。
    要停止此加载,请使用stopLoading方法。
    要查看接收者是否已经加载了内容,请使用load属性。
    --------------------------------------------------------------------------------
    标识要加载内容位置的URL请求。
    @property(nonatomic, readonly, strong) NSURLRequest *request;
    --------------------------------------------------------------------------------
    一个布尔值,指示接收器是否已加载内容。
    @property(nonatomic, readonly, getter=isLoading) BOOL loading;
    如果YES,则接收方仍在加载内容;否则,NO。
    --------------------------------------------------------------------------------
    停止加载由接收方管理的任何web内容。
    - (void)stopLoading;
    // 讨论
    停止主框架或其子框架加载过程中的任何内容。
    如果没有加载内容,则不执行任何操作。
    --------------------------------------------------------------------------------
    // 重新加载当前页面。
    - (void)reload;
    

    来回移动

    指示接收器是否可以向后移动的布尔值。
    @property(nonatomic, readonly, getter=canGoBack) BOOL canGoBack;
    // 讨论
    如果YES,则能够向后移动;否则,NO。
    --------------------------------------------------------------------------------
    一个布尔值,指示接收方是否可以向前移动。
    @property(nonatomic, readonly, getter=canGoForward) BOOL canGoForward;
    如果YES,能够继续前进;否则,NO。
    --------------------------------------------------------------------------------
    加载前向列表中的前一个位置。
    - (void)goBack;
    --------------------------------------------------------------------------------
    加载后向前列表中的下一个位置。
    - (void)goForward;
    

    设置Web内容属性

    一个布尔值,用于确定是否按下链接显示链接的目标预览。
    @property(nonatomic) BOOL allowsLinkPreview;
    // 讨论
    此属性可用于支持3D触摸的设备。
    默认值为NO。
    如果将web视图的这个值设置为YES,用户(使用支持3D Touch的设备)可以预览链接目的地,
    并可以通过单击链接预览检测到的数据,比如地址。
    用户将这种预览称为peeks。
    如果用户按得更深,预览就会导航(或者按用户术语称为pop)到目标。
    因为pop导航将用户从应用程序切换到Safari,所以通过这个属性,它是opt-in,而不是这个类的默认行为。
    如果你想支持链接预览但又想让用户留在你的应用中,你可以从使用UIWebView类切换到使用SFSafariViewController类。
    如果您使用web view作为应用程序内浏览器,那么进行此更改是最佳实践。
    Safari视图控制器类自动支持链接预览。
    --------------------------------------------------------------------------------
    一个布尔值,确定网页是否缩放以适合视图,用户是否可以更改缩放。
    @property(nonatomic) BOOL scalesPageToFit;
    // 讨论
    如果YES,则将页面缩放到适合的大小,用户可以放大和缩小。
    如果NO,则禁用用户缩放。默认值是NO。
    --------------------------------------------------------------------------------
    与web视图关联的滚动视图。
    @property(nonatomic, readonly, strong) UIScrollView *scrollView;
    // 讨论
    如果应用程序想定制web视图的滚动行为,它可以访问滚动视图。
    --------------------------------------------------------------------------------
    一个布尔值,指示web视图是否在将内容呈现完全加载到内存中之前抑制内容呈现。
    @property(nonatomic) BOOL suppressesIncrementalRendering;
    // 讨论
    当设置为YES时,web视图不会尝试在传入内容到达时呈现它。
    相反,视图的当前内容保持不变,直到接收到所有新内容,然后呈现新内容。
    此属性不影响在框架加载完成后检索内容的呈现。
    默认情况下,此属性的值为NO。
    --------------------------------------------------------------------------------
    一个布尔值,指示web内容是否可以通过编程方式显示键盘。
    @property(nonatomic) BOOL keyboardDisplayRequiresUserAction;
    // 讨论
    当此属性设置为YES时,用户必须显式地点击web视图中的元素,以显示该元素的键盘(或其他相关输入视图)。
    当设置为NO时,元素上的焦点事件将自动显示input视图并与该元素关联。
    此属性的默认值为YES。
    --------------------------------------------------------------------------------
    转换为web视图内容中可单击url的数据类型。
    @property(nonatomic) UIDataDetectorTypes dataDetectorTypes;
    // 讨论
    使用此属性指定应自动转换为web视图中可单击url的数据类型(电话号码、HTTP链接、电子邮件地址等)。
    单击后,web视图打开负责处理URL类型的应用程序,并将URL传递给它。
    有关可用于自动检测的数据类型,请参见UIDataDetectorTypes枚举。
    

    运行JavaScript

    返回运行JavaScript脚本的结果。
    虽然不反对使用此方法,但最佳实践是使用WKWebView类的evaluateJavaScript:completionHandler:方法。
    - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
    // script
    要运行的JavaScript脚本。
    // 返回值
    运行传递给脚本参数的JavaScript脚本的结果,如果脚本失败,则返回nil。
    // 讨论
    新的应用程序应该使用来自WKWebView类的evaluateJavaScript:completionHandler:方法。
    如果可能的话,遗留应用程序应该采用这种方法。
    // 重要的
    stringByEvaluatingJavaScriptFromString:方法同步等待JavaScript计算完成。
    如果您加载的web内容的JavaScript代码没有经过您的审核,那么调用这个方法可能会挂起您的应用程序。
    最佳实践是采用WKWebView类并使用它的evaluateJavaScript:completionHandler:方法。
    

    管理媒体播放

    一个布尔值,用于确定HTML5视频是内联播放还是使用本机全屏控制器。
    @property(nonatomic) BOOL allowsInlineMediaPlayback;
    // 讨论
    必须将此属性设置为播放内联视频。
    将此属性设置为true以内联播放视频。
    将此属性设置为false以使用本机全屏控制器。
    在iPhone上向HTML文档添加视频元素时,还必须包含playsinline属性。
    iPhone的默认值为false, iPad的默认值为true。
    // 重要的
    在iOS 10.0之前创建的应用程序必须使用webkit-playsinline属性。
    --------------------------------------------------------------------------------
    一个布尔值,它决定HTML5视频是可以自动播放还是需要用户开始播放。
    @property(nonatomic) BOOL mediaPlaybackRequiresUserAction;
    // 讨论
    iPad和iPhone的默认值都是YES。
    要使媒体在加载时自动播放,请将此属性设置为NO,并确保要播放的<audio>或<video>元素具有自动播放属性设置。
    --------------------------------------------------------------------------------
    一个布尔值,用于确定是否允许从该视图中播放Air。
    @property(nonatomic) BOOL mediaPlaybackAllowsAirPlay;
    // 讨论
    iPad和iPhone的默认值都是YES。
    --------------------------------------------------------------------------------
    一个布尔值,用于确定是否允许从该视图中播放图片。
    @property(nonatomic) BOOL allowsPictureInPictureMediaPlayback;
    // 讨论
    默认值为YES,在支持图片模式(PiP)的设备上为YES,在所有其他设备上为NO。
    

    管理页面

    页与页之间空白的大小(以点为单位)。
    @property(nonatomic) CGFloat gapBetweenPages;
    默认值为0。
    --------------------------------------------------------------------------------
    由web视图布局产生的页面数。
    @property(nonatomic, readonly) NSUInteger pageCount;
    --------------------------------------------------------------------------------
    每个页面的大小,以点为单位,按页面流动的方向。
    @property(nonatomic) CGFloat pageLength;
    // 讨论
    当paginationMode从右到左或从左到右时,此属性表示每个页面的宽度。
    当paginationMode为自上而下或自下而上时,此属性表示每个页面的高度。
    默认值为0,这意味着布局使用viewport的大小来确定页面的大小。
    调整此属性的值会导致中继。
    --------------------------------------------------------------------------------
    列或页中断发生的方式。
    @property(nonatomic) UIWebPaginationBreakingMode paginationBreakingMode;
    // 讨论
    此属性确定是否启用与列和分页有关的某些CSS属性或忽略这些属性。
    当这个属性被设置为UIWebPaginationBreakingModeColumn时,内容会尊重与换行相关的CSS属性,而不是换行。
    有关可能的值,请参见UIWebPaginationBreakingMode。
    默认值是UIWebPaginationBreakingModePage。
    --------------------------------------------------------------------------------
    web视图中内容的布局。
    @property(nonatomic) UIWebPaginationMode paginationMode;
    // 讨论
    此属性确定web视图中的内容是被分解为每次一个屏幕填充视图的页面,还是作为一个长滚动视图显示。
    如果设置为分页形式,此属性将切换内容上的分页布局,从而使web视图使用pageLength和gapbetween页面的值来转发其内容。
    有关可能的值,请参见UIWebPaginationMode。
    默认值是uiwebpaginationmodeunpagized。
    

    相关宏

    表示用户操作的常量。
    typedef enum UIWebViewNavigationType : NSInteger {
        ...
    } UIWebViewNavigationType;
    UIWebViewNavigationTypeLinkClicked
    用户点击链接。
    UIWebViewNavigationTypeFormSubmitted
    用户提交了一个表单。
    UIWebViewNavigationTypeBackForward
    用户轻击后退或前进按钮。
    UIWebViewNavigationTypeReload
    用户点击“重新加载”按钮。
    UIWebViewNavigationTypeFormResubmitted
    用户重新提交表单。
    UIWebViewNavigationTypeOther
    还发生了其他一些动作。
    --------------------------------------------------------------------------------
    列或页中断发生的方式。
    typedef enum UIWebPaginationBreakingMode : NSInteger {
        ...
    } UIWebPaginationBreakingMode;
    UIWebPaginationBreakingModePage
    内容涉及与分页相关的CSS属性。
    UIWebPaginationBreakingModeColumn
    内容涉及与列分解相关的CSS属性。
    --------------------------------------------------------------------------------
    web视图中内容的布局,它决定页面流动的方向。
    typedef enum UIWebPaginationMode : NSInteger {
        ...
    } UIWebPaginationMode;
    UIWebPaginationModeUnpaginated
    内容显示为一个长滚动视图,没有不同的页面。
    UIWebPaginationModeLeftToRight
    内容被分成从左到右流动的页面。
    UIWebPaginationModeTopToBottom
    内容被分成从上到下流动的页面。
    UIWebPaginationModeBottomToTop
    内容被分成从底部到顶部流动的页面。
    UIWebPaginationModeRightToLeft
    内容被分成从右向左流动的页面。
    --------------------------------------------------------------------------------
    定义可以在基于文本的内容中检测到的信息类型。
    typedef enum UIDataDetectorTypes : NSUInteger {
        ...
    } UIDataDetectorTypes;
    UIDataDetectorTypePhoneNumber
    检测格式化为电话号码的字符串。
    UIDataDetectorTypeLink
    检测格式化为url的字符串。
    UIDataDetectorTypeAddress
    检测格式化为地址的字符串。
    UIDataDetectorTypeCalendarEvent
    检测格式化为日历事件的字符串。
    UIDataDetectorTypeShipmentTrackingNumber
    检测格式化为包裹递送公司跟踪号的字符串。
    UIDataDetectorTypeFlightNumber
    检测格式化为航空公司航班号码的字符串。
    UIDataDetectorTypeLookupSuggestion
    检测格式化为用户可能想要查找的信息的字符串。
    UIDataDetectorTypeNone
    UIDataDetectorTypeAll
    

    相关文章

      网友评论

          本文标题:UIWebView 官方文档

          本文链接:https://www.haomeiwen.com/subject/zfrmjctx.html