iOS11 iphonex 隱藏Home條 隱藏底部白條

今天閱讀博客時(shí)候發(fā)現(xiàn)這篇文章講到了如何隱藏home 條,特此記錄,感興趣的可以鏈接過去看看。

眾所周知,蘋果公司推出了iPhone X。隨之而來的是一個(gè)新的白色線條,幸福地坐在底部的觸摸板上,它替代了原有了home鍵。這也喚起了人們對物理home鍵的懷舊情結(jié)。
對消費(fèi)者來說,這意味著蘋果公司在硬件和軟件創(chuàng)造出了美麗的奇跡,到時(shí)可以在預(yù)定期預(yù)定給予支持。對很多開發(fā)者來說,這意味著我應(yīng)該做什么?謝天謝地,答案相當(dāng)簡單。
本周,我們將看看蘋果公司在適配Home指示鍵上給我們提供了什么。
首先

1509001681184280.png

我們并不是每天都有新視頻和硬件公告,但這正是此后不久發(fā)生的事情:
在“為iPhone X而設(shè)計(jì)”一文中,蘋果公司元老級(jí)設(shè)計(jì)大師邁克·斯特恩(Mike Stern)制定了一些基本規(guī)則。所有的東西都是平等的,在你使用下面的新功能之前,你先停住腳步,看看你的使用方法是否符合相關(guān)要求。
嘗試避免在home指示鍵附近區(qū)域做交互式控制,尤其是通過手勢識(shí)別驅(qū)動(dòng)的交互控制。
不要隱藏指示鍵、在它周圍添加任何裝飾品、或者試圖改變它的外觀。在iPhone X頂部的相機(jī)遮光板也是如此。
通常情況下,你不希望隱藏home指示鍵,除非你有被動(dòng)觀看體驗(yàn)(如:視頻,照片幻燈片等)。
TL; DR -蘋果公司表示, 大多數(shù)時(shí)候,不要去理會(huì)糟糕的指示鍵。
但是,這篇文章說的是特殊時(shí)間。
UI視圖控制器新增功能
不管你是喜歡在每個(gè)控制器的基礎(chǔ)上適配狀態(tài)欄,還是對你來說適配都是令人厭惡的,蘋果公司一直在以實(shí)例的方式做出這樣的決定,而不是選擇一個(gè)全球的所有設(shè)計(jì)。
隱藏home指示鍵基本上與適配狀態(tài)欄的方式相同:

class ViewController: UIViewController
{
override func prefersHomeIndicatorAutoHidden() -> Bool
{
return true
}
}

如上所述,這樣的場景應(yīng)該是異常的,因?yàn)檫@樣的默認(rèn)實(shí)現(xiàn)返回false。然而,文件中有一個(gè)特別的評論:
這個(gè)系統(tǒng)會(huì)考慮你的偏好,但返回YES并不能保證home指示鍵被隱藏。
似乎沒有提到為什么或者在什么時(shí)候UIKit會(huì)不尊重你所選擇的偏好,盡管它認(rèn)為蘋果會(huì)強(qiáng)制執(zhí)行自己認(rèn)為最好的。當(dāng)蘋果認(rèn)為它是最好時(shí)-就會(huì)不顧布爾值。因此,這應(yīng)該是一些有趣的Stack Overflow帖子。
此外,這可能看起來很明顯,但可能是最初令人困惑的根源。特別提到的功能名稱是以自動(dòng)隱藏結(jié)束而不是隱藏,這就是說從這里返回到true意味著UIKit會(huì)在它的狀態(tài)良好并準(zhǔn)備就緒時(shí)隱藏指示鍵(通常情況下是指,控制器幾秒鐘都沒有接收任何觸摸事件),而不是立即隱藏指示鍵。
UIKit信號(hào)
繼續(xù)并行使用應(yīng)用程序狀態(tài)欄,只是簡單地覆蓋或分配給有條件地控制覆蓋函數(shù)的變量是不夠的。我們還有另一個(gè)新增的功能來查看控制器強(qiáng)大的setNeedsSomethingDone函數(shù):

class ViewController: UIViewController
{
var shouldHideHomeIndicator = false
override func prefersHomeIndicatorAutoHidden() -> Bool
{
return shouldHideHomeIndicator
}
override func viewDidAppear(_ animated: Bool)
{
super.viewDidAppear(animated)
self.shouldHideHomeIndicator = true
self.setNeedsUpdateOfHomeIndicatorAutoHidden()
}
}

這是一個(gè)傳遞函數(shù),因?yàn)樗皇窍騏IKit發(fā)出信號(hào),我們改變了先前選擇的用于home指示鍵可見性的值。不過,與狀態(tài)欄不同的是,自UIKit自己隱藏它之后,這并沒有技術(shù)上的動(dòng)效。因此,像這樣的代碼沒有效果:

override func viewDidAppear(_ animated: Bool)
{
super.viewDidAppear(animated)
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.shouldHideHomeIndicator = true
UIView.animate(withDuration: 1, animations: {
self.setNeedsUpdateOfHomeIndicatorAutoHidden()
})
}
}

setNeedsUpdateOfHomeIndicatorAutoHidden()發(fā)送一個(gè)簡單的任務(wù)都將執(zhí)行一個(gè)輕微的alpha漸變,這與它是否包含在動(dòng)畫區(qū)塊中無關(guān)。
容器控制器
查看控制器的最后一個(gè)新增加功能是通知UIKit子視圖控制器是否應(yīng)該指示home指示鍵的可見性。如果你開發(fā)iOS足夠長時(shí)間,你可能會(huì)利用容器視圖控制器來更好地促進(jìn)抽象和封裝模式。

override func childViewControllerForHomeIndicatorAutoHidden() -> UIViewController?
{
return myChildController
}

這些控制器可能會(huì)發(fā)現(xiàn)自己靠近屏幕底部,如果是這樣-你可能希望home指示鍵忽略你。一個(gè)簡單的覆蓋返回隱藏的實(shí)例或是正在執(zhí)行的實(shí)例解決了這個(gè)問題:
如果你確實(shí)指出子控制器應(yīng)該指示其可見性,你也有責(zé)任重寫以前討論的函數(shù):

class MyChildViewController: UIViewController
{
override func prefersHomeIndicatorAutoHidden() -> Bool
{
return true
}
}

該函數(shù)的特性是允許零返回值。如果是這種情況,那么UIKit將依靠當(dāng)前的控制器作出決定-如果你選擇不覆蓋該函數(shù),那么這個(gè)決定將是“顯示home指示鍵”。
這也可以是一個(gè)運(yùn)行時(shí)決定, UIKit將再次要求你調(diào)用它的我們剛剛提及的函數(shù)來通知框架應(yīng)該再次查詢prefersHomeIndicatorAutoHidden():

override func childViewControllerForHomeIndicatorAutoHidden() -> UIViewController?
{
return myChildController
}
func initializeChildController()
{
myChildController = MyChildController()
self.setNeedsUpdateOfHomeIndicatorAutoHidden()
}

以上函數(shù)就是實(shí)現(xiàn)這種功能。
雖然可以將其視為需要應(yīng)用于日常iOS事件(即處理控制器)的更多思考過程,但你將發(fā)現(xiàn)應(yīng)用程序界面幾乎與現(xiàn)有的處理類似問題的UIKit函數(shù)相同。
更新:回答讀者問題
Fabian Kuenzel提問:
新的home指示鍵還將放在網(wǎng)站的底部導(dǎo)航之上嗎?
詳細(xì)回答請看這里:
iPhone X 網(wǎng)頁設(shè)計(jì)
我現(xiàn)在不是一個(gè)網(wǎng)絡(luò)開發(fā)人員,但似乎有一個(gè)可以處理自動(dòng)輸入的元標(biāo)簽:
默認(rèn)值為auto,它應(yīng)該是需要插入內(nèi)容的-雖然你可以對此忽視而選擇封面覆蓋整個(gè)視口的內(nèi)容。但是,如果你應(yīng)該選擇整個(gè)屏幕,則使用一個(gè)新的CSS函數(shù),常量(),可以使用預(yù)定義的常量來對圍繞安全區(qū)域的元素進(jìn)行填充。這類似于iOS的應(yīng)用程序界面安全區(qū)域布局指南。
這是指南中的一個(gè)實(shí)例:

.post {
padding: 12px;
padding-left: constant(safe-area-inset-left);
padding-right: constant(safe-area-inset-right);
}

Bogdan有更全面的理解:
我不明白為什么在默認(rèn)情況下蘋果不關(guān)閉home指示鍵,或者至少給用戶一個(gè)選項(xiàng)來關(guān)閉。將新用戶引入操作是一個(gè)很好的功能,但最終情況是(如用戶使用手機(jī)10分鐘后),每個(gè)人都會(huì)記得如何切換應(yīng)用程序,那么這時(shí)候就是一個(gè)令人討厭和令人分心的線條。我說錯(cuò)什么了嗎?
這是一個(gè)很好的觀點(diǎn)。
就像一個(gè)凹槽不僅僅是一個(gè)凹槽,它更接近于是硬件的一部分及iPhone的品牌認(rèn)知度,我認(rèn)為軟件和home指示鍵同等重要。它是其DNA的一部分,另外我還懷疑,蘋果公司的想法是,它的出現(xiàn)使用戶對UX有信心。它避免了一系列的問題,諸如:“為什么現(xiàn)在已經(jīng)消失了? 它什么時(shí)候會(huì)顯示? 什么時(shí)候會(huì)隱藏? 我返回的時(shí)候還會(huì)顯示嗎?
也就是說,我同意你的看法-這些是常見的假設(shè),這似乎有點(diǎn)多,但我還沒有使用iPhone X,所以我會(huì)在正式體驗(yàn)后再做出判斷。
Will Kampmann提問:
你知道當(dāng)全屏顯示應(yīng)用如玩游戲時(shí)會(huì)發(fā)生什么嗎?Home指示鍵會(huì)被不同的滑動(dòng)方式喚醒嗎?如推送通知及常用iPhone上的控制中心?
有一個(gè)應(yīng)用程序來忽視這個(gè)操作,但是蘋果真的真的希望你不要這樣做。他們提到的一個(gè)使用情景是什么?全屏游戲。以下是關(guān)于此問題的人機(jī)界面指南:
在極少數(shù)情況下,像游戲這樣的沉浸式應(yīng)用可能需要自定義的、優(yōu)先于系統(tǒng)的屏幕邊緣手勢,第一個(gè)滑動(dòng)調(diào)用特定于應(yīng)用的手勢,而第二次滑動(dòng)則會(huì)調(diào)用系統(tǒng)手勢。
這是一個(gè)簡單的可覆蓋任何視圖控制器的實(shí)例:

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
return .top
}

總結(jié):
iPhone X注意事項(xiàng):
對iOS工程師來說,它僅僅設(shè)計(jì)之后表現(xiàn)出的成就感,還是另一個(gè)視圖控制器對修復(fù)和編碼的考慮?也可能是兩者的混合。如果時(shí)間在軟件開發(fā)的連續(xù)統(tǒng)一體中教會(huì)了我們什么,那就是時(shí)間流逝+一個(gè)生態(tài)系統(tǒng)=新的應(yīng)用程序界面。在今天的智能手機(jī)領(lǐng)域,更現(xiàn)實(shí)的說法是,時(shí)間流逝+蘋果的生態(tài)系統(tǒng)=新的硬件=新的應(yīng)用程序界面。
我們通過增加iPhone的高度成功適配了。我們通過不同的決議來推動(dòng)進(jìn)程。我們可以處理導(dǎo)航欄中的一個(gè)小相機(jī)配件,以及靠近底部擋板的2點(diǎn)線條。

原文作者:Jordan Morgan
原文地址:https://medium.com/the-traveled-ios-developers-guide/iphone-x-dealing-with-home-indicator-2e8e47f5647f
本文原址請點(diǎn)擊此處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,028評論 4 61
  • 昨夜醉春風(fēng),樓臺(tái)高且寒,隔窗挑燭繡雙花!鴛鴦漾水柳。 無意入廊橋,癡夢驚又慌。怕是江風(fēng)懶少年,又做丁零舞。
    撲忒閱讀 188評論 0 0
  • 今天下午,我做了一件比較瘋狂的事情,北美n1附近,沿著晉陽街體育路口向南走,到了龍城大街后,再沿著龍城大街...
    琦檢閱讀 597評論 0 3
  • 殘蓮靜坐亦成佛 神安在 形不傲 泥身已藏芊芊我 櫛風(fēng)沐雨 永持初心 不為有巨擘 遠(yuǎn)遁煙火哀怨少 近匿市井歡...
    品賢閱讀 357評論 0 2

友情鏈接更多精彩內(nèi)容