2013-04-04 64 views
1

我有一個UIButton的自定義子類,我想在多個項目中重用,其中一些使用界面生成器和故事板,其中一些可能不會。它涉及在幾個地方設置按鈕的框架。支持AutoLayout和傳統佈局

如果我在初始化添加

self.translatesAutoresizingMaskIntoConstraints = YES; 

,一切看起來和作品的權利,但是,我得到:

Unable to simultaneously satisfy constraints. 
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
Will attempt to recover by breaking constraint…etc 

登錄到控制檯。但是,如果我設置

self.translatesAutoresizingMaskIntoConstraints = NO; 

沒有按鈕大小作品和按鈕被徹底打破。

有沒有辦法阻止錯誤,因爲它似乎降級到正確的東西,或者我可以以某種方式手動刪除違規約束?

我已經試過按鈕初始化後傾倒約束,但是,它似乎並沒有包含約束AutoLayout最終打破。

編輯:下面是一個示例項目,然後我的按鈕代碼的鏈接。它在自動佈局在故事板中關閉時效果很好,但是,當自動佈局打開時,按鈕似乎位於原點(似乎是因爲當調用initWithCoder時,按鈕沒有超級視圖或任何位置信息)。

http://www.kudit.com/dump/KFB.zip

http://www.kudit.com/dump/KuditConfirmButton.zip

+0

我還沒有找到一種方法來做到這一點,而不是手動設置'翻譯...'屬性取決於使用的佈局的類型。你如何添加你的按鈕 - 作爲xib/storyboard或代碼中的一部分? – jrturton 2013-04-04 06:29:29

+0

作爲故事板的一部分。我想設計這個類,以便我可以在IB中替換類,並使用IB和運行時屬性進行自定義,以製作簡單的可重用的插入式解決方案。 – Gujamin 2013-04-04 15:27:48

+0

你可以編輯問題來顯示你的一些代碼嗎?特別是任何你創建約束的代碼。我假設你在按鈕內部創建約束?您可以在非自動佈局視圖內放置自動佈局視圖,反之亦然,但如果嘗試限制自動視圖視圖,則會出現問題。從現在的情況來看,從你的問題來看你不清楚你正在做什麼。 – jrturton 2013-04-04 16:05:51

回答

0

你的猜測是正確的,因爲當按鈕從故事板初始化(使用的initWithCoder :)幀是零 - 這是預期的視圖中使用自動佈局 - 幀別直到稍後再分配。

我有你的示例項目主要是通過創建一個名爲hasSetup的boolean ivar在自動佈局下工作,它在setup方法中設置爲YES。如果幀爲零,則設置方法不運行。我也從layoutSubviews再次調用它。這樣可以避免在故事板問題中使用autolayout時不工作。

雖然各層仍然不是正確的大小。您可能想要從layoutSubviews調整它們的大小。

您也不能在自動佈局下使用setFrame - 您需要確保您的視圖上的任何約束(如來自故事板的尺寸限制)被調整。處理兩種可能性會變得非常混亂。

他們看起來確實不錯 - 希望在排序這些問題時在GitHub上看到他們。

+0

那麼有沒有辦法檢測自動佈局?會查詢.constraints工作?而且,當以編程方式與IB相加時,似乎存在問題。對此有何想法? – Gujamin 2013-04-05 17:17:07

+0

以編程方式添加,您必須根據您使用的佈局手動設置。從故事板/ xib中,似乎有意義(儘管我沒有測試過),根據故事板的Autolayout狀態適當地設置該標誌。 – jrturton 2013-04-05 21:16:02

+0

你能指出哪裏可以通過代碼訪問這個「標誌」嗎?我沒有在'UIStoryboard'或'UIView'上看到任何「usesAutolayout」標誌。 – Gujamin 2013-05-09 14:17:22