4

我有一个自定义 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

4 回答 4

14

我猜你已经将 self.view 连接到 UIView in Interface Builder.

为了改变 UIView 框架,在Interface Buildergo toFile Inspector和 uncheckUse Autolayout中,然后在代码中改变框架。

希望这可以帮助。

于 2013-02-07T10:36:22.283 回答
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;
}

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

于 2012-12-13T04:41:07.733 回答
4

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

- (void)viewDidAppear:(BOOL)animated {
    dispatch_async(dispatch_get_main_queue(), ^{
        box.frame = CGRectMake(20, 20, 100, 73)];
});
于 2014-06-13T03:32:27.027 回答
-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]; 

如果我看看您的自定义视图,可以提供更好的解决方案。

于 2012-04-30T12:16:42.483 回答