標籤:ios8 swift mvc autolayout 自動布局
上一話我們詳細介紹了多MVC模式以及Segue過渡的時候,這一話用一個新的Demo來詮釋。
我們建立一個Psychologist的工程。把ViewController的名字改為PsychologistViewController。那麼這個控制器是做什麼用的呢?系統問你一個問題,然後你做出回答,系統會根據你的回答判斷你是否開心,這樣就能用上我們之前的Hppiness的項目。
在視圖中加入一個label,然後調整字型為36,文字置中,label兩邊上邊都與藍線對齊。
每一話都會滲透一些自動布局的內容。我們讓這個label重設到它被推薦的位置。
我們會看到:
中間的藍線代表label與下邊界產生了關聯,但是我們不希望這樣做,因為你並不確認啟動並執行裝置的尺寸。通常我們不去關聯下邊界,而讓下邊界的距離做一個彈性的變數。
我們開啟右側的尺寸檢測器,可以看到所有的約束:
我可以選中我不喜歡的約束然後delete它。刪掉之後會出現黃線,因為我們沒有足夠的約束了,按照我們之前講的,在試圖大綱中update frame,你會看到黃線消失了。
有了問題,現在我們把答案拖出來,這是一個按鈕。我把這個按鈕拖到中間,然後點擊重設位置到推薦位置(和上面操作一樣),然後我們刪除不需要的約束,這裡我只保留豎直方向的置中,我們不需要上下的間距和固定寬高,因為我希望這個按鈕的大小根據它裡面的內容來自動調整。
這時我需要使用其他約束了,點擊右下角按鈕欄的第一個按鈕
因為已經有了豎直方向的中心,所以只要添加一個水平方向的置中就行了。
你會看到現在我們的按鈕在水平和豎直方向上都置中了。再次update frame,按鈕的位置就調整好了。
然後複製按鈕,加入不同的內容。
新按鈕重設到推薦的位置,你會看到它有兩個約束,一個水平置中,一個底部距離:
我們用同樣的辦法建立第三個按鈕:
我們運行一下我們的程式:
你可以看到頂部的文字被截掉了,旋轉一下:
看起來橫屏模式下效果很好,但是豎屏就不行了,為什麼會這樣呢?因為我們設定了字型為36號,你可以在storyboard屬性監測器的Autoshrink中看到,目前的設定為Fixed
Font Size(固定字型大小):
但是這個字型不需要固定大小,我需要設定它的最小值,不希望它比12號要小,設定如下:
現在我們再來運行,你會看到字型會自動縮放,當螢幕變寬的時候字型會變大。
那麼有沒有辦法可以讓文字自動換行呢?一種方法是用textView替換label。另一種方法是設定label中的Line Breaks,當前的做法是刪減尾部,最直接的直接設定lines的值。
【我們都愛Paul Hegarty】斯坦福IOS8公開課個人筆記22 多MVC模式Demo中的AutoLayout自動布局