2015-02-12 82 views
0

我試了很多時間用編程方式使用約束來設置UIButton的位置,並用相同的方法進行搜索。但無法得到它。如果我以編程方式進行按鈕,它工作正常。如何以編程方式爲IBOutlet設置約束?

這裏按鈕被視爲故事板中的IBOutlet。

這裏是我的代碼

[btnBack setTranslatesAutoresizingMaskIntoConstraints:NO]; 

NSDictionary *dictViews = @{@"btnBack" : btnBack}; 

NSArray *arr_WIDTH_btnBack = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[btnBack(46)]" options:0 metrics:nil views:dictViews]; 
NSArray *arr_HEIGHT_btnBack = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnBack(30)]" options:0 metrics:nil views:dictViews]; 
[btnBack addConstraints:arr_WIDTH_btnBack]; 
[btnBack addConstraints:arr_HEIGHT_btnBack]; 

NSArray *arr_POS_btnBack_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-16-[btnBack]" options:0 metrics:nil views:dictViews]; 
NSArray *arr_POS_btnBack_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-31-[btnBack]" options:0 metrics:nil views:dictViews]; 
[self.view addConstraints:arr_POS_btnBack_H]; 
[self.view addConstraints:arr_POS_btnBack_V]; 

我得到的錯誤 -

終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,理由是:「無法解析約束格式: 無法解釋‘|’字符,因爲相關視圖沒有超級視圖H:| -16- [btnBack]

我不知道我犯的錯誤在哪裏。我錯過了什麼嗎?

TIA

+0

爲什麼你在故事板和約束條件下編程設置UIButton?在故事板中設置約束是很容易的。 – iOSfleer 2015-02-12 08:39:08

+0

打擾我的愚蠢回答 – kylejm 2015-02-12 08:41:46

+1

我一直在練習自動佈局一天。我正在練習並嘗試以各種方式進行探索。我已經學會了分別在故事板和編程中設置約束條件。但我堅持以編程方式爲IBOutlets設置約束。 – Dev 2015-02-12 08:47:01

回答

0

你把上面的代碼放在viewDidLoad中嗎?我有一個類似的問題。在viewdidload中,故事板中的所有視圖都尚未添加到UIViewController的視圖中。你可以做一個self.subviews的快速NSLog,你不會在那裏看到UIButton。

只有在viewDidAppear的循環中才會添加它。如果你在viewDidAppear中添加約束條件,它應該可以工作。

不過,問題是限制只會在加載視圖後出現。

相關問題