2012-04-30 124 views
3

我有一個自定義的uiview,我試圖更新幀大小。一旦點擊它,我會在方法中這樣做。該方法被調用,並且幀值發生了變化,但屏幕上沒有任何反應!無法更改UIView幀大小

if (!touched) { 

     GameBox *box = (GameBox *)[self.view viewWithTag:40]; 

     [box setFrame:CGRectMake(20, 20, 100, 73)]; 
     NSLog(@"%f", box.frame.origin.x); 
     markButton.enabled = NO; 
     guessButton.enabled = NO; 
     [self.view reloadInputViews]; 

     NSLog(@"The action bar should now be hidden"); 
    } 
    else if (touched) { 
     guessButton.enabled = YES; 
     markButton.enabled = YES; 
     [self.view reloadInputViews]; 
     NSLog(@"The action bar should now be visible"); 
    } 
+0

請詢問您想do..so我能明白.. – Nit

+0

我想:一)調整uisubview框的CGRect框架,和b)禁用/重新啓用猜測按鈕和標記按鈕 – michaela

回答

-1

[self.view reloadInputViews]通常用於FirstResponders。我沒有太多關於你customview的想法,但我認爲只是設置,您可以使用框架:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationDelay:1.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

viewFrame.frame=frame;//Frame Defined by you 
[UIView commitAnimations]; 

可以提供更好的解決方案,如果我得到一個看看你的自定義視圖。

11

您需要設置調整viewDidAppear(而不是viewDidLoad)中的框架。

- (void) viewDidAppear:(BOOL)animated { 
[super viewDidAppear:animated]; 

CGRect frame = self.tableView.frame; 
frame.origin.y += 100.0; 
frame.size.height -= 100.0; 
self.tableView.frame = frame; 
} 

顯然這與導航控制器中的表格視圖有關。

+1

它爲我工作。 – sivakspt

14

我想你已經迷上了selfview到UIView Interface Builder

爲了改變UIView幀,在Interface Builder轉到File Inspector,並取消選中Use Autolayout,然後在代碼中改變幀。

希望這會有所幫助。

+0

我不敢相信我花了3個小時調試......謝謝! – OMGPOP

+0

謝謝!簡單的解決方案,但快速完成工作。 – user3344977

+0

這可行,但它會影響整個文檔使用自動佈局的能力...... –

4

這是因爲自動佈局,但是您可以在自動佈局完成其工作或更改其約束後執行此操作。如果你想在自動佈局後添加以下內容。

- (void)viewDidAppear:(BOOL)animated { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     box.frame = CGRectMake(20, 20, 100, 73)]; 
}); 
+0

它幫助了我,謝謝,但你能告訴我爲什麼你把它放在dispatch block裏面嗎@Deniz –

+0

看來,我想在當前重繪週期之後改變幀大小,在viewDidAppear方法完成執行後的一段時間。但我現在還不確定。 – Deniz