无法更改UIView帧大小

时间:2012-04-30 10:44:52

标签: iphone xcode uiview frame cgrect

我有一个自定义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");
    }

4 个答案:

答案 0 :(得分:14)

我猜你已经在Interface Builder中将自我视图挂钩到了UIView。

要更改UIView框架,请在Interface Builder转到File Inspector,然后取消选中Use Autolayout,然后在代码中更改框架。

希望这有帮助。

答案 1 :(得分: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;
}

显然这与导航控制器中的表视图有关。

答案 2 :(得分:4)

这是因为自动布局,但是您可以在自动布局完成其工作或更改其约束后执行此操作。如果您想在自动布局后添加以下内容。

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

答案 3 :(得分:-1)

[self.view reloadInputViews]通常用于FirstResponders。我对您的自定义视图没有太多了解,但我认为只需设置您可以使用的框架:

[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]; 
如果我查看您的自定义视图,

可以提供更好的解决方案。