日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UIModalPresentationStyle 各种类型的区别

發(fā)布時間:2025/3/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UIModalPresentationStyle 各种类型的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

UIViewController有個屬性modalPresentationStyle,它決定了當前控制器 present 出的下一控制器的展示方式。

官方文檔對這些效果有比較詳細的介紹,這里寫個 demo 幫助理解,demo 在模擬器上運行可能會有一點卡頓,真機沒有影響。

預(yù)備知識

presenting、presented viewController

presentingViewController指的是 present 出當前控制器的控制器。

presentedViewController指被當前控制器 present 出的控制器。

Size Class

對于各種常見情況的 Size Class 如下幾張圖片所示:

iPhonePlus的SizeClass

普通iPhone的SizeClass

全屏iPad的SizeClass

UIModalPresentationStyle

enum UIModalPresentationStyle : Int {case fullScreencase pageSheetcase formSheetcase currentContextcase customcase overFullScreencase overCurrentContextcase popovercase none } 復制代碼

fullScreen

  • 在各種 Size Class 情況下都是全屏展示
  • 執(zhí)行 present 操作的控制器的view和它的subViews,在 present 完成后都會被從當前視圖層級移除

fullScreen

對于水平方向為 compact 的情況,不管用哪種 style 推出其他控制器,presentedViewController都是以fullScreen方式展示。所以剩下的所有類型,都只針對水平方向為 regular 論述。

pageSheet

  • 被推出視圖部分的遮蓋下層視圖
  • 其寬度總是為該設(shè)備豎屏時候的寬度(不可變),高度則為當前設(shè)備方向的屏幕高度(可變,其實還要去掉狀態(tài)欄的高度)

pageSheet豎屏

pageSheet橫屏

formSheet

  • 被推出視圖大小比屏幕的小,且總是居中顯示
  • 在橫屏時,如果彈出了鍵盤,視圖位置會跟著上移
  • 可以設(shè)置被推出視圖的preferredContentSize來設(shè)置它的大小

formSheet豎屏

formSheet橫屏

這里設(shè)置了preferredContentSize = CGSize(width: 200, height: 200)。

currentContext

  • 可以用在 iPadUISplitViewController中,指定單獨覆蓋屏幕單側(cè)的控制器;popover方式展示的控制器,再用該方式 present 出下一視圖
  • 在執(zhí)行 present 操作的控制器的控制器層級中往上查找,如果某個控制器的definesPresentationContext == true則它來 present,假如沒有一個為true,那么則由 window.rootController來 present
  • 執(zhí)行 present 操作的控制器的view和它的subViews,在 present 完成后都會被從當前視圖層級移除

definesPresentationContext默認為false,系統(tǒng)提供的一些像UINavigationController的控制器,其默認值為true。它的定義為:

A Boolean value that indicates whether this view controller's view is covered when the view controller or one of its descendants presents a view controller.

對于以currentContext方式推出的視圖,如果它的presentedViewController是一個popover,那么推出該視圖的modalTransitionStyle不能是partialCurl,否則會引起崩潰。

currentContext豎屏

currentContext橫屏

currentContextInPopover

custom

A custom view presentation style that is managed by a custom presentation controller and one or more custom animator objects.

詳細介紹在下篇文章中進行。

overFullScreen

基本和fullScreen一致。只是 present 完成后,不會移除執(zhí)行 present 操作的控制器的view和它的subViews。如果presentedViewController.view是有透明度的,底層視圖就可以得以顯示。

overFullScreen

overCurrentContext

基本和currentContext一致。只是 present 完成后,不會移除執(zhí)行 present 操作的控制器的view和它的subViews。如果presentedViewController.view是有透明度的,底層視圖就可以得以顯示。

overCurrentContext

popover

  • 在 iPad 上用popover的方式顯示;在 iPhone 上默認用fullScreen方式顯示,但是在 iOS8 后可以設(shè)置成popover的方式,在none中會進行解釋
  • 默認情況下,點擊灰色的背景popover會直接消失,通過presentedViewController.popoverPresentationController?.passthroughViews可以配置灰色背景的哪些視圖區(qū)域可以點擊

UIPopoverPresentationController的定義:

An object that manages the display of content in a popover.

當視圖被用popover方式 present 的時候,總有一個popoverPresentationController的實例來管理呈現(xiàn)的行為。

popover

none

  • 該枚舉值不可以直接賦值給modalPresentationStyle
  • popoverPresentationController會調(diào)用它delegate的方法來配置popover的視圖,none只能用在adaptivePresentationStyle(for:)代理方法中返回,告訴popoverPresentationController不要適配presentedViewController,這樣在 iPhone 中也可以用popover的樣式展示了

none

總結(jié)

以上是生活随笔為你收集整理的UIModalPresentationStyle 各种类型的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。