亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

狀態欄和導航欄出現在我的視圖的邊界上,在IOS 7中

狀態欄和導航欄出現在我的視圖的邊界上,在IOS 7中

qq_笑_17 2019-06-28 15:21:37
狀態欄和導航欄出現在我的視圖的邊界上,在IOS 7中我最近下載了Xcode在iOS 7中測試我的應用程序。我注意到并確認的第一件事是,我的視圖邊界并不總是調整大小來說明狀態欄和導航欄。在……里面viewDidLayoutSubviews,我打印視圖的界限:{{0, 0}, {320, 568}}這將導致我的內容出現在導航欄和狀態欄下面。我知道我可以通過獲取主屏幕的高度、減去狀態欄的高度和導航欄的高度來說明自己的高度,但這似乎是不必要的額外工作。我怎樣才能解決這個問題?最新情況:我找到了解決這個具體問題的辦法。將導航條的半透明屬性設置為否:self.navigationController.navigationBar.translucent = NO;這將修復在導航欄和狀態欄下面的視圖。但是,當您希望導航條是半透明的時,我還沒有找到解決方案。例如,查看圖片全屏,我希望導航條半透明,和視圖被框在它下面。這是可行的,但是當我切換顯示/隱藏導航欄時,我已經體驗到了更奇怪的結果。第一個子視圖(UIScrollView)得到它的界限y原點每次更改。
查看完整描述

3 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

您可以通過實現一個名為edgesForExtendedLayout在iOS 7 SDK中。為此,請添加以下代碼,

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

您需要在您的-(void)viewDidLoad方法。

IOS 7會給布局和自定義您的外觀帶來一些更改。UI..視圖控制器布局、色調顏色和字體的更改將影響所有烏伊基特對象在您的應用程序中。此外,對手勢識別器API的增強為您提供了對手勢交互的更細粒度的控制。

使用視圖控制器

在IOS 7中,視圖控制器使用全屏布局.同時,IOS 7對視圖控制器的視圖布局方式提供了更細粒度的控制。特別是,全屏布局的概念已經被細化,讓視圖控制器指定其視圖的每個邊緣的布局。

這個wantsFullScreenLayout視圖控制器屬性在IOS 7中不建議使用。wantsFullScreenLayout = NO在iOS 7中運行時,視圖控制器可能會在意外的屏幕位置顯示其內容。

若要調整視圖控制器的視圖布局方式,UIViewController提供下列屬性:

  • EDgesfortendedLayout

這個edgesForExtendedLayout屬性使用UIRectEdge類型,它除了指定“無”和“全部”之外,還指定矩形的四個邊中的每一個。使用edgesForExtendedLayout指定應擴展視圖的哪些邊緣,而不管條形半透明。默認情況下,此屬性的值為UIRectEdgeAll.

  • 擴展LayoutIncludeesOpaqueBars

如果您的設計使用不透明的條,請改進。edgesForExtendedLayout還可以通過設置extendedLayoutIncludesOpaqueBars財產..(默認值為extendedLayoutIncludesOpaqueBars.)

  • 自動調整ScrollViewInset

如果不希望自動調整滾動視圖的內容嵌入,請設置automaticallyAdjustsScrollViewInsets..(默認值為automaticallyAdjustsScrollViewInsets.)

  • TopLayoutGuide,底部LayoutGuide

這個topLayoutGuidebottomLayoutGuide屬性指示視圖控制器視圖中頂部或底部條邊的位置。如果條形圖應與視圖的頂部或底部重疊,則可以使用InterfaceBuilder將視圖相對于該條定位,方法是在topLayoutGuide或者到底層指南的頂端。(如果沒有條形圖應重疊視圖,則topLayoutGuide與視圖的頂部和bottomLayoutGuide與視圖底部相同。)這兩個屬性都是在請求時延遲創建的。

請參考,蘋果文檔


查看完整回答
反對 回復 2019-06-28
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

您不需要計算出將所有東西向下移動到什么程度,這里有一個在屬性中的構建。在InterfaceBuilder中,突出顯示視圖控制器,然后導航到屬性檢查器。在這里,您將看到一些復選框旁邊的單詞“擴展邊緣”。正如您所看到的,在第一個屏幕截圖中,默認的選擇是內容出現在頂部和底部的欄下,而不是在不透明的條下,這就是為什么將條形樣式設置為不半透明的原因。

正如您在第一個屏幕截圖中所看到的那樣,在導航欄下面隱藏了兩個UI元素。(我在IB中啟用了線框來說明這一點)這些元素、UIButton和UISegmentedControl都將其“y”原點設置為零,視圖控制器被設置為允許頂部欄以下的內容。


第二個屏幕截圖顯示了取消選中“頂部欄下”復選框時會發生什么。如您所見,視圖控制器視圖已被適當地向下移動,使其原點正好位于導航欄下面。


也可以通過使用-[UIViewController edgesForExtendedLayout]..這里有一個指向類引用的鏈接EDGEFortendedLayout,以及為了UIRectEdge

[self setEdgesForExtendedLayout:UIRectEdgeNone];


查看完整回答
反對 回復 2019-06-28
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

我以編程的方式創建了我的視圖,并最終為我工作:

- (void) viewDidLayoutSubviews {
    // only works for iOS 7+
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = self.topLayoutGuide.length;

        // snaps the view under the status bar (iOS 6 style)
        viewBounds.origin.y = topBarOffset * -1;

        // shrink the bounds of your view to compensate for the offset
        viewBounds.size.height = viewBounds.size.height + (topBarOffset * -1);
        self.view.bounds = viewBounds;
    }}

來源(在TopLayoutGuide第39頁底部的一節)。


查看完整回答
反對 回復 2019-06-28
  • 3 回答
  • 0 關注
  • 730 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號