2014-04-09 61 views
0

每次點擊我的UISegementedControl時,它都會回到原始框架。我幾乎看不到透過我的半透明工具欄。 我有一個UITableView一個UIViewController和UIToolBar這樣的: my view controllerUISegementedControl在觸摸後恢復到原始框架

存在隱患只是表視圖下方一個UISegmentedControl,工具欄背後: storyboard layout setup

過濾按鈕調用「onFilterButtonPressed」的方法

- (IBAction)onFilterButtonPressed:(id)sender 
{ 
    if(self.filterBar.hidden){ 
     [self showFilterBar]; 
    } else { 
     [self hideFilterBar]; 
    } 
} 

- (void)hideFilterBar 
{ 
    CGRect filterBarFrame = CGRectMake(0, self.view.frame.size.height+(self.filterBar.frame.size.height+1), self.filterBar.frame.size.width, self.filterBar.frame.size.height); 
    CGRect tableViewFrame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y,self.tableView.frame.size.width, self.tableView.frame.size.height+(self.filterBar.frame.size.height+1)); 

    [UIView animateWithDuration:0.3 animations:^{ 
     [self.filterBar setFrame:filterBarFrame]; 
     [self.tableView setFrame:tableViewFrame]; 
    } completion:^(BOOL finished) { 
     self.filterBar.hidden = YES; 
    }]; 
} 

- (void)showFilterBar 
{ 
    CGRect filterBarFrame = CGRectMake(0, self.view.frame.size.height-(self.filterBar.frame.size.height+1), self.filterBar.frame.size.width, self.filterBar.frame.size.height); 
    CGRect tableViewFrame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y,self.tableView.frame.size.width, self.tableView.frame.size.height-(self.filterBar.frame.size.height+1)); 

    self.filterBar.hidden = NO; 
    [UIView animateWithDuration:0.3 animations:^{ 
     [self.tableView setFrame:tableViewFrame]; 
     [self.filterBar setFrame:filterBarFrame]; 
    }]; 

} 

回答

2

這是因爲自動佈局。打開它(默認情況下),您應該通過修改約束來完成視圖的任何定位或調整大小,而不是設置框架。

+0

謝謝,蘋果公司關於動畫的文檔並沒有提到關於動畫約束的任何內容,而是關於設置框架。我發現這與你的建議[http://stackoverflow.com/questions/12622424/how-do-i-animate-constraint-changes](http://stackoverflow.com/questions/12622424/how-doi-i-動畫 - 約束 - 變化)並且工作。 – doman412