簡體   English   中英

Xcode7上的自動版式

[英]AutoLayout on Xcode7

我很難理解Autolayout以及它如何對除我以外的其他所有人顯着起作用。 問題是,當約束最終以一種分辨率(例如,iPad)為我工作時,它們不能滿足iPhone4s之類的另一種要求,因此,這可能導致約束沖突,或者根本無法滿足我的要求(例如,該按鈕將在iPad上的文本字段附近顯示,而在iPhone上不是很靠近)。 我已經閱讀了Raywenderlich的Adaptive Layout教程以及Steven Lipton的有關Autolayout(Practical AutoLayout)的書 ,仍然遇到很多麻煩。 請幫幫我。 它是如此令人沮喪,以至於我想完全放棄編碼並最終成為和尚之類的東西... x(

編輯

因此,為進一步幫助您,我將在一些快照的幫助下解釋某些問題對我不起作用。 我最初的想法是顯示4個視圖,每個視圖包含一個文本字段,按下特定按鈕,這些字段將通過CoreAnimation過渡。 ViewController的視圖在背景中具有一個圖像,一個后退按鈕,4個視圖,一個進度條和一個用於顯示每個視圖的按鈕。 問題如下; 盡管整個視圖在模擬器上似乎是合適的,但我可以在xcode的終端中看到沖突。

具有所有元素的圖像:

具有所有元素的圖像

有沖突的圖片:

有沖突的形象

但是以某種方式,如果我解決了沖突,則自動布局將無法在所有設備上正常運行。 例如

沒有沖突,但是在iPhone4s的文本字段中隱藏了下一個按鈕:

沒有沖突,但在iPhone4s的文本字段中隱藏了下一個按鈕

與iPad一樣,沒有任何沖突,並且可以非常方便地使用“下一步”按鈕:

沒有沖突,非常容易使用“下一步”按鈕

我該如何處理才能在所有設備上相同且連貫地工作。 請幫忙謝謝。

要了解的一件事是,對於大小差異很大的屏幕,AutoLayout不能解決您的所有問題(而且我仍然覺得尺寸類使用起來很麻煩)。 我通常堅持將兩個不同的xib用於電話和平板電腦,並連接到同一視圖控制器。 而且,如果可以的話,請放棄對iOS 7的支持,這將消除許多與AutoLayout有關的麻煩。

編輯

一定要使用自動布局 我所說的只是通常最好是使用兩個不同的xib,以實現截然不同的分辨率,但是當然兩者都使用自動布局。

我想從自動布局的經驗中分享幾件事。

  1. 如果您希望元素顯示在特定位置(右側20個點,頂部40個點),則需要在情節提要中調整按鈕,並添加尾隨和頂部約束。 Xcode會給您建議來修復元素的高度/寬度。 如果希望與情節提要中的高度高度完全相同,則調整元素的大小或添加高度和寬度約束。
  2. 如果要讓en元素根據不同屏幕尺寸的高度寬度展開/收縮,請添加-lead,-trailing,-top和bottom約束。
  3. 重要:當我們“固定”元素(例如按鈕)(頂部,底部,前導,尾隨)時,這些約束是相對於其他元素(例如其他按鈕)添加的。 在這種情況下,請確保其他元素具有約束。 否則,Xcode將給出缺少約束的錯誤。
  4. 不要像Xcode所建議的那樣添加缺少的約束,因為Xcode會添加一些約束,這將導致意外的大小。

現在,關於您的問題:出現鍵盤時,您都可以向上移動視圖(相對於鍵盤的高度。如果您要在不以編程方式更改約束的情況下實現此目的,則答案將為您提供幫助。否則,如果您已正確添加了約束,而不是create和IBOutlet,最頂部元素的top約束,並從該約束的常量中減去鍵盤高度(150);當鍵盤消失時,還需要在該約束的常量中添加鍵盤高度(150)。

盡管自動布局可以幫助管理它,但下一個按鈕被鍵盤隱藏的問題與自動布局沒有直接關系。 問題很簡單,就是您在屏幕上使用的空間超過了可用空間。

有幾種方法可以解決此問題:

  • 您可以將內容嵌入滾動視圖中,以便用戶在滾動視圖的內容超過可用高度時可以上下滾動屏幕。 自動布局將在這里有所幫助:您將在滾動視圖的底部到底部布局指南中設置一個約束,為該約束添加一個出口,並且在代碼中,您可以觀察鍵盤的隱藏/顯示/更改通知並調整該約束的常數

  • 您可以調整布局,以便即使在鍵盤向上的情況下也始終可見,而無論鍵盤是否向上都不會改變任何位置。 這意味着您不會占用鍵盤會出現的任何空間

  • 您可以根據鍵盤的存在動態地調整布局。 這會將第一個選項中的約束與其他約束組合在一起,以在該約束移動時將其移動。

在執行任何操作之前,請考慮一下您希望事情在不同情況下的外觀如何。 然后建立將給出此結果的約束。 自動布局無法為您猜測您要做什么,您需要對所需布局有一個精確的了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM