<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC=5] * * * * * >原文鏈接 :[The Adaptive Model](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/TheAdaptiveModel.html#//apple_ref/doc/uid/TP40007457-CH19-SW1) 自適應界面是充分利用可用空間的界面。 適應性意味著能夠調整您的內容,使其適合任何 iOS 設備。iOS 中的自適應模型支持簡單但動態的方式來重新排列和調整內容以響應更改。 當你利用這個模型時,只需要很少的額外代碼,一個應用程序可以適應不同的屏幕尺寸(如圖 12-1 所示)。 ###### 圖 12-1 適應不同的設備和方向 ![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/VCPG_AdaptiveModel_13-1_2x.png) 自動布局是構建自適應界面的重要工具。使用自動布局,可以定義管理視圖控制器視圖布局的規則(稱為約束)。可以在 Interface Builder 中以可視方式創建這些規則,也可以在代碼中以編程方式創建。當父視圖的大小發生變化時,iOS 會根據您指定的約束條件自動調整其大小并重新定位視圖。 特征是適應性模型的另一個重要組成部分。特征描述了您的視圖控制器和視圖必須操作的環境。特征可以幫助你做出關于界面的高層決策。 ### 第一節 特征的作用 當僅依靠約束不足以管理布局時,視圖控制器有幾個機會進行更改。視圖控制器、視圖和其他一些對象管理一個指定與該對象關聯的當前環境的特征集合。表 12-1 描述了這些特征以及如何使用它們來影響用戶界面。 ###### 表12-1 特征 | 特征 | 例子 | 描述 | | --- | --- | --- | | [horizontalSizeClass](https://developer.apple.com/documentation/uikit/uitraitcollection/1623508-horizontalsizeclass) | [UIUserInterfaceSizeClassCompact](https://developer.apple.com/documentation/uikit/uiuserinterfacesizeclass/uiuserinterfacesizeclasscompact) | 這個特質表達了界面的一般寬度。 使用它來進行粗層次的布局決策,比如視圖是垂直堆放的,是并排顯示的,還是隱藏的,或者是用另一種方式顯示。 | | [verticalSizeClass](https://developer.apple.com/documentation/uikit/uitraitcollection/1623513-verticalsizeclass) | [UIUserInterfaceSizeClassRegular](https://developer.apple.com/documentation/uikit/uiuserinterfacesizeclass/uiuserinterfacesizeclassregular) | 這個特質表達了界面的一般高度。 如果設計要求所有內容都在屏幕上不滾動且適配屏幕,那么使用這個特性來做布局決定。 | | [displayScale](https://developer.apple.com/documentation/uikit/uitraitcollection/1623519-displayscale) | 2.0 | 這個特性表明內容是顯示在視網膜顯示器還是標準分辨率顯示器上。 使用它(根據需要)進行像素級布局決策或選擇要顯示的圖像版本。 | | [userInterfaceIdiom](https://developer.apple.com/documentation/uikit/uitraitcollection/1623521-userinterfaceidiom) | [UIUserInterfaceIdiomPhone](https://developer.apple.com/documentation/uikit/uiuserinterfaceidiom/uiuserinterfaceidiomphone) | 這個特性提供了向后兼容性,并傳達你的應用程序運行的設備類型。 盡可能避免使用這個特質。 對于布局決定,請使用 horizontalSizeClass 、verticalSizeClass ]。 | 使用特質來決定如何呈現用戶界面。在 Interface Builder 中構建界面時,使用特征來更改顯示的視圖和圖像,或使用特征來應用不同的約束集。許多 UIKit 類(如 `UIImageAsset` )使用您指定的特征來定制它們提供的信息。 這里有一些技巧可以幫助你理解什么時候使用不同類型的特質: * **使用 Size class 對界面進行粗略更改**。 Size class 更改是添加或刪除視圖,添加或刪除子視圖控制器或更改布局約束的適當時間。 也可以不做任何事情,讓界面使用現有的布局約束自動適應。 * **不要假設一個 Size class 類對應于一個視圖的特定寬度或高度**。視圖控制器的 Size class 可以改變的原因很多。 例如,iPhone 上的容器視圖控制器可能會使其一個子控制器強制橫屏以不同方式顯示內容。 * **使用 Interface Builder 為每個 Size class 指定不同的布局約束**。使用 Interface Builder 來指定約束要比自己添加和刪除約束簡單得多。視圖控制器通過應用故事板中的相應約束條件來自動處理 Size class 更改。有關為不同 Size class 配置布局約束的信息,請參 [Configuring Your Storyboard to Handle Different Size Classes](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/BuildinganAdaptiveInterface.html#//apple_ref/doc/uid/TP40007457-CH32-SW2) 。 * **避免使用特有信息來做出關于界面布局或內容的決定**。在 iPad 和 iPhone 上運行的應用程序通常應顯示相同的信息,應使用 Size class 來進行布局決策。 ### 第二節 什么時候特征和 Size 發生變化? 特征變化很少發生,但確實發生。UIKit 根據底層環境的變化更新視圖控制器的特性。Size class 的特征比顯示比例特征更有可能發生變化。成語的特點的改變有的話應該也很少。 Size class更改發生的原因如下: * 視圖控制器窗口的垂直或水平 Size class 通常由于設備旋轉而改變。 * 容器視圖控制器的水平或垂直 Size class 已更改。 * 當前視圖控制器的水平或垂直 Size class由其容器顯式更改。 視圖控制器層次結構中的 Size class 更改傳播到任何子視圖控制器。 窗口對象作為該層次結構的根節點,為其根視圖控制器提供基線 Size class 特征。 當設備方向在縱向和橫向之間變化時,窗口會更新自己的 Size class 信息,并沿著視圖控制器層次結構傳播該信息。 容器視圖控制器可以將更改傳遞給未經修改的子視圖控制器,也可以覆蓋每個子視圖的特征。 在 iOS 8 和以后的版本中,窗口的原點總是在左上角,當設備在橫向和縱向之間旋轉時,窗口的邊界會發生變化。窗口大小的變化會沿著視圖控制器的層級傳播,并伴隨著相應的特征改變。對于層次結構中的每個視圖控制器,UIKit 調用下面的方法來報告這些變化: * [willTransitionToTraitCollection:withTransitionCoordinator:](https://developer.apple.com/documentation/uikit/uicontentcontainer/1621511-willtransitiontotraitcollection) 告訴每個相關的視圖控制器,它的特征即將改變。 * [viewWillTransitionToSize:withTransitionCoordinator:](https://developer.apple.com/documentation/uikit/uicontentcontainer/1621466-viewwilltransitiontosize) 告訴每個相關的視圖控制器它的大小即將改變。 * [ traitCollectionDidChange:](https://developer.apple.com/documentation/uikit/uitraitenvironment/1623516-traitcollectiondidchange) 告訴每個相關的視圖控制器, 它的特征現在已經改變了。 遍歷視圖控制器層次結構時,UIKit 只有在發生更改時才會將更改報告給視圖控制器。 如果容器視圖控制器重寫其子節點的 Size class,則在容器的 Size class 更改時不會通知這些子節點。同樣,如果一個視圖控制器的視圖有一個固定的寬度和高度,它不會收到 Size class 更改通知。 圖 12-2 顯示了在 iPhone 6 上發生旋轉時視圖控制器的特性和視圖大小是如何更新的。從縱向到橫向的旋轉改變了屏幕的垂直大小,從常規到緊湊。Size class 的改變和相應的視圖大小的改變將被傳播到視圖控制器層次結構中。將視圖動畫到為新 Size 后,UIKit 在調用視圖控制器的 [ traitCollectionDidChange:](https://developer.apple.com/documentation/uikit/uitraitenvironment/1623516-traitcollectiondidchange) 方法之前應用 Size class 和視圖 Size 更改。 ###### 圖 12-2 更新視圖控制器的特征和視圖 size ![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/VCPG_RotationTraits_fig_13-2_2x.png) ### 第三節 不同設備的默認 Size Classes 每個iOS設備都有一組默認的 Size Class,可以在設計界面時使用它們作為參考指南。表 12-2 列出了縱向和橫向兩種設備的 Size Class 未在表格中列出的設備與具有相同屏幕尺寸的設備具有相同的 Size Class 。 ###### 表 12-2 不同屏幕尺寸的設備的 Size Classes ![](https://box.kancloud.cn/63fe65c8780da669485dc993b1390e86_1708x758.png) > 重要提示 切勿假設您的應用程序將在設備上顯示特定的 Size Class 。 在決定如何配置對象時,總是檢查對象特征集合中找到的 Size Class 。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看