本來就覺得, 如果不使用 xib 檔來進行 view layout 的配置, 一定會有困難的東西會跑出來的 ⋯ 所以墨菲定律一定會發作的 ⋯
使用 xib 檔來設定 autolayout 在網路上能找到的步驟還算不少,所以就不打算細部描述;
因為要讓畫面長得橫豎像這樣,設定起來並沒有太複雜 ⋯
Portrait 把後面多出來沒用到的截掉了的 |
Landscape 把後面多出來沒用到的截掉了的 |
只需要增加並調整 xib 檔的設定就可以了 |
很簡單就能搞定了的東西。
不過,使用 code 之後,會發現完全不是那麼回事了。
而且,網路上能找到相關的資訊的部分也並不是那麼的 充足。 =..="
所以導致了後續在 coding 過程,不太容易找到問題點的問題 ( 快變成繞口令了 ⋯ )
透過 coding 的方式先在本來的這個 NavigationBar 後面,再加上另一個 NaigationBar
載入後的畫面:
刺激的部分要出現了,由於網路上找到的資訊,都會強調要將 setTranslatesAutoresizingMaskIntoConstraints 這個設定關閉,所以就試著在 Create method 最末端試行了一下:
整個用 coding 產生的 NavigationBar 就脫序演出了 (; ̄ェ ̄)
然後,就覺得應該是因為 code 還沒有寫完整個關係,畢竟用了這個指令,應該就要開始把對應關係給寫完成才對。
於是就在根據網路上找到的一些資訊把 Auto Layout 的 code 補齊。
結果,畫面還是長得和上面那一張一樣,這下就麻煩了啊 ~
因為,使用 xib 檔的部分,始終是正確的,所以只好想辦法回到 xib 檔裡頭尋找相關資訊 ⋯
然後找到這個地方的先後關係,可能有些影響:
於是把 code 在進行些微的調整:
結果發現,改完之後,好像還是沒有變化,那問題應該就不是在這種地方了。
每次的更動,都是遇到另一種玄妙的機會!
再重新查找了一堆資訊後,覺得,那個 Back 字樣還會留在那裡,應該還是因為 NavigationBar 的一些設定值造成的,
找了一堆參數後覺得 setClipsToBounds 這一個參數值是最有機會的了,於是又加上了這一段:
結果下來,是更慘烈的畫面:
整個 code 產生的 NavigationBar 消失在畫面啦,不過透過輸出 frame 來檢查位置發現,位置其實是被設定在原來的定點上 ⋯ 更冏
只好先把這個參數的設定註解掉,再來尋找其他地方可能會影響到的地方 ⋯
有步想到沒步 ⋯ 只好試著從 NSLayoutAttribute 這個列舉參數值的地方下手 ⋯
不過,還是打算先把 setClipsToBounds 設定起來,因為總覺得 back 文字會跑走,多少和它應該有點關係吧 ⋯
NSLayoutAttributeCenterY
NSLayoutAttributeTopMargin NS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeBottomMargin NS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeCenterYWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
以認知上來說,覺得前面如果已經設定好了 X 軸向的對應,後面應該就是接著把 Y 軸的對應也設定完成,應該就能乖乖的正常作業了的,結果實際上執行後的結果並不是這麼回事
⋯ 一樣完全沒看到半個影子 ⋯
⋯ 一樣完全沒看到半個影子 ⋯
死馬當活馬醫,反正都試了,繼續來試看看其他的 ⋯
結果搞笑的感覺的狀況就是, 我再次用了另一個也是操作 X 軸向的 NSLayoutAttributeLeft 參數的時候, NavigationBar 就跑回來了 ⋯
這個時候的設定是這樣:
雖然位置不太正確,有可能是因為參數值還沒有調整的關係吧。
既然已經出得來了,那就只要在想辦法把其他設定都弄到好應該就可以了;
不過因為在測試的過程發現,iOS 7 和 iOS 8 用相同的 code 運作,好像還是會有畫面不太一樣的狀況,就順便想辦法一次修掉了。
大致上修正後的 code 是這樣子:
然後畫面就是這樣子:
沒有留言:
張貼留言