UISegmentedControl在触摸后恢复原始帧

时间:2014-04-09 05:14:47

标签: ios ios7 uisegmentedcontrol uiviewanimation

每次点击我的UISegementedControl,它都会回到原始帧。我几乎无法透过半透明的工具栏看到它。 我有一个带有UITableView的UIViewController,以及像这样的UIToolBar: my view controller

在工具栏后面的表视图下方隐藏了一个UISegmentedControl: storyboard layout setup

Filter按钮调用'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];
    }];

}

1 个答案:

答案 0 :(得分:2)

这是因为自动布局。打开它(默认情况下),您应该通过修改约束而不是设置框架来进行任何定位或调整视图大小。