Navigation bar 的註意事項

来源:http://www.cnblogs.com/silence-cnblogs/archive/2017/01/08/6262471.html
-Advertisement-
Play Games

Navigation bar 的註意事項 Bar button item 使用 button 作為 custom view,初始化 isEnabled 為 false,註意順序 需要設置 bar button item 的 custom view 為 button,但一開始 isEnabled 要為 ...


Navigation bar 的註意事項

Bar button item 使用 button 作為 custom view,初始化 isEnabled 為 false,註意順序

需要設置 bar button item 的 custom view 為 button,但一開始 isEnabled 要為 false。

生成一個 button

let leftButton = UIButton(frame: CGRect(x: 0, y: 0, width: 80, height: 44))
leftButton.setTitleColor(UIColor.green, for: .normal)
leftButton.setTitleColor(UIColor.red, for: .disabled)
leftButton.setTitle("Enabled", for: .normal)
leftButton.setTitle("Disabled", for: .disabled)
leftButton.addTarget(self, action: #selector(leftButtonClicked(_:)), for: .touchUpInside)

如果先設置 isEnabled,後設置 bar button item

leftButton.isEnabled = false
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: leftButton)

結果 isEnabled 還是 true

正確的順序

navigationItem.leftBarButtonItem = UIBarButtonItem(customView: leftButton)
leftButton.isEnabled = false // or navigationItem.leftBarButtonItem?.isEnabled = false

結果 isEnabled 是 false

改變 navigation bar isTranslucent 屬性會改變 view 的坐標

放置兩個 label。其中, frameLabel 沒有添加約束(NSLayoutConstraint),constraintLabel 左、右、下都有約束,與 view 相接。

設置右上角按鈕動作

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Change", style: .plain, target: self, action: #selector(rightButtonClicked(_:)))

改變 navigation bar isTranslucent 屬性,顯示 label 的坐標

@objc private func rightButtonClicked(_ sender: AnyObject) {
        navigationController?.navigationBar.isTranslucent = !navigationController!.navigationBar.isTranslucent
        
        updateLabelContent()
}
    
private func updateLabelContent() {
    title = navigationController!.navigationBar.isTranslucent ? "Translecent" : "Opaque"
        
    let frameLabelOrigin = frameLabel.frame.origin
    frameLabel.text = "Frame label. x = \(frameLabelOrigin.x), y = \(frameLabelOrigin.y)"
        
    let constraintLabelOrigin = constraintLabel.frame.origin
    constraintLabel.text = "Constraint label. x = \(constraintLabelOrigin.x), y = \(constraintLabelOrigin.y)"
        
    print("\(title)")
    print("Status bar frame:", UIApplication.shared.statusBarFrame) // (0.0, 0.0, 375.0, 20.0)
    print("Navigation bar frame:", navigationController!.navigationBar.frame) // (0.0, 20.0, 375.0, 44.0)
}

通過點擊右上角按鈕,來查看變化。

透明時

不透明時

View controller 的 view 坐標改變,Status bar 和 navigation bar 的坐標不變

Navigation bar 從不透明變透明,status bar 和 navigation bar 的坐標都不變。整個 view 下移64,高度減小64,不會超出 window。沒加約束的 frameLabel 坐標不變,但相對 window 的位置隨著 view 一起下移。添加約束的 constraintLabel 的坐標改變,但是相對 window 的位置不變。

如果需要改變 navigation bar isTranslucent 屬性,就要考慮對其他 view 會不會有影響,是否使用約束來定位。

轉載請註明出處:http://www.cnblogs.com/silence-cnblogs/p/6262471.html



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 源於前段時候微信小程式最初火爆公測時段,把以前用 Canvas 實現的大轉盤抽獎移植成微信小程式,無奈當時小程式對 Canvas 支持不夠完善,只好降低用 CSS3 實現。雖然比不上 Canvas 繪圖的絢麗,但也總算完成了一個抽獎的 Demo,詳見: "https://github.com/giv ...
  • ▓▓▓▓▓▓ 大致介紹 看到了一個輪播圖的思路,就想的自己動手實踐一下,總體來說用jQuery實現起來簡單多了 如果對代碼中使用的方法有疑問,可以參考我的jQuery學習之路(持續更新),裡面有講解;或者你和我一樣學習jQuery不久,那你可以看看我的jQuery小案例(持續更新),互相學習! 預覽 ...
  • 將html模板放入script標簽中 使用javascript開始解析模板 ...
  • 分享一下編寫設置和獲取顏色的插件,首先我將插件的名字命名為jquery.color.js。該插件用來實現以下兩個功能1.設置元素的顏色。2.獲取元素的顏色。 先在搭建好如下編寫插件的框架: 我這裡採用jQuery.fn.extend().這種方法來編寫,代碼如下: 這個方法可裡面有一個value.參 ...
  • 目前的多個項目中都用到分頁這個功能,為了提高可復用性,我特地分離出來寫了個分頁的指令。直接貼代碼,詳情如下: index.html index.js 指令模板 page.html 指令定義page.js 效果如圖所示: ...
  • JQuery極大的提高了我們編寫JavaScript的效率,讓我們可以愉快的編寫代碼,做出各種特效。大多數情況下,我們都是使用別人開發的JQuery插件,今天我們就來看看如何把我們常用的功能做出JQuery插件,然後像使用jQuery那樣來操作DOM. 一、jQuery插件開發快速上手 1、jQue ...
  • Vue有一核心就是數據驅動(Data Driven),允許我們採用簡潔的模板語法來聲明式的將數據渲染進DOM,且數據與DOM是綁定在一起的,這樣當我們改變Vue實例的數據時,對應的DOM元素也就會改變了。 今兒,我們就一起來模擬一下它吧。 ...
  • 目前幾乎所有的APP在用戶註冊時都會有設置頭像的需求,大致分為三種情況: (1)通過獲取本地相冊的圖片,經過裁剪後作為頭像。 (2)通過啟動手機相機,現拍圖片然後裁剪作為頭像。 (3)在APP中添加一些自帶的頭像資源,供用戶選擇(不夠人性化,目前很少使用)。 這次我們簡單介紹下通過獲取本地相冊以及相 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...