2016-05-26 120 views
0

我想替換UIButton的約束設置框架,但我的代碼不斷崩潰,我做錯了什麼?約束替換UIButton框架

- (void)CreateButton { 
self.Button = [[UIButton alloc] init]; 
//self.Button.frame = CGRectMake(30, 30, 100, 100); 
[self.Button addConstraint:[NSLayoutConstraint constraintWithItem:MyScrollView 
                  attribute:NSLayoutAttributeTop 
                  relatedBy:NSLayoutRelationEqual 
                  toItem:self.myButton 
                  attribute:NSLayoutAttributeTop 
                 multiplier:2.0 
                  constant:30]]; 
[self.myButton addConstraint:[NSLayoutConstraint constraintWithItem:MyScrollView 
                  attribute:NSLayoutAttributeHeight 
                  relatedBy:NSLayoutRelationEqual 
                  toItem:self.myButton 
                  attribute:NSLayoutAttributeHeight 
                 multiplier:3.0 
                  constant:50]]; 
[self.myButton setBackgroundColor:[UIColor orangeColor]]; 
[self.myButton setTitle:@"Press Me" forState:UIControlStateNormal]; 
[self.myButton setTitleColor:[UIColor purpleColor] forState:UIControlStateNormal]; 
[MyScrollView addSubview:self.myButton]; 
+2

*「Crashing」*,嗯?如果向我們顯示錯誤消息**和**,告訴我們導致崩潰的代碼的**確切**行,我們可能會有更多幫助。 – luk2302

+0

假設你想爲單個按鈕設置約束條件,至少你在上面的代碼(self.Button和self.myButton) – slxl

+0

中有兩個不同的地方,並且爲了簡單起見,試圖使用obj-C命名約定。這將有助於您避免將來出現此類問題https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html – slxl

回答

0

您應該將約束添加到MyScrollView。

+0

的開頭寫'self.myButton'而不是'self.Button',這不會導致崩潰。 –

+0

從UIView的文檔:addConstraint:「約束必須只包含在接收視圖範圍內的視圖,具體來說,涉及的任何視圖必須是接收視圖本身或接收視圖的子視圖。被認爲是由該視圖保存的視圖,評估約束時使用的座標系是保存約束的視圖的座標系。 – fabe