2013-03-16 97 views
0

我已經嘗試了很長時間,但由於約束問題不斷得到崩潰...如何正確設置此佈局的約束條件?

如何設置此佈局,使其適用於iPhone 3Gs,4和5以及iPad?

_______TOP OF SCREEN________ 



Table View should attach to top of screen and with 5 pixels to the Label below 
flexible in height so it works on iPhone 5 and 6 


____________________________ 


Label with fixed distance to table View above and button below 

____________________________ 

Button with fixed distance to Label above and fixed distance to bottom of screen 

____________________________ 
     Bottom of screen 

所以基本上所有的距離和高度是固定的,除了桌子的高度,應填寫無論是屏幕的上方和標籤

之間可每當我設置這樣的contstraints我不斷收到崩潰在iPhone 3的iOS 6.1:

2013-03-16 23:12:51.013 BMWhat Test[64196:907] 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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x1d1f2d70 h=-&- v=-&- UIView:0x1d1aac20.height == UITransitionView:0x1d174220.height - 20>", 
    "<NSLayoutConstraint:0x1d1c03b0 V:[UILabel:0x1c58f100(21)]>", 
    "<NSLayoutConstraint:0x1d1ce780 V:[UITableView:0x1cbd9000(469)]>", 
    "<NSLayoutConstraint:0x1c5aff30 V:[UIButton:0x1d1d1bb0(44)]>", 
    "<NSLayoutConstraint:0x1d1c0030 V:|-(0)-[UITableView:0x1cbd9000] (Names: '|':UIView:0x1d1aac20)>", 
    "<NSLayoutConstraint:0x1d1921d0 V:[UILabel:0x1c58f100]-(1)-[UIButton:0x1d1d1bb0]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1c58e4d0 h=--- v=--- V:[UIWindow:0x1d002230(480)]>", 
    "<NSLayoutConstraint:0x1d1cd6c0 V:[UITableView:0x1cbd9000]-(NSSpace(8))-[UILabel:0x1c58f100]>", 
    "<NSLayoutConstraint:0x1d1ca370 V:[UIButton:0x1d1d1bb0]-(5)-| (Names: '|':UIView:0x1d1aac20)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1d172a90 h=--& v=-&- UITransitionView:0x1d174220.height == UIWindow:0x1d002230.height>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1d1ce780 V:[UITableView:0x1cbd9000(469)]> 

Break on objc_exception_throw to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

在模擬器iPhone的Retina 4英寸iOS 6的正常工作。

回答

2

問題是你指定一個垂直約束在tableview綁高度到469磅。既然你希望tableview的高度是靈活的,你不需要這個約束。

+0

完美 - 感謝您的幫助!順便說一下,有一種方法來檢查這些約束問題之前運行某種方式,讓他們顯示我更好的方式? – user387184 2013-03-17 06:30:29

+0

我不認爲這些工具還支持這一點。約束的解決方案最終取決於運行時實際窗口的大小和方向,所以我不確定這些工具在編譯時能夠完全檢測到問題。但是在運行時,您會看到像您看到的異常,並且您還可以在運行時檢查不明確的約束。 – 2013-03-17 18:05:43

+0

花了很多時間後,高度正是衝突的約束。萬分感謝! – Tomer 2013-07-13 03:44:24

2

NSLayoutConstraint僅在iOS的支持6

iPhone 3不支持的iOS 6 3Gs的是做的最早的模型。

+0

感謝您指出這一點 - 我的意思是3Gs。這個問題更多的是如何自己做約束,所以它不會崩潰。無論如何,我只是意識到,在手機本身 - 沒有連接到調試器 - 它並不重要,因爲它不會崩潰。可能是這樣的路要走嗎?只要它在電話上很好,一個不關心恢復的崩潰:-) – user387184 2013-03-16 23:18:02