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 にフックしたと思いますInterface Builder

UIView フレームを変更するには、 にInterface Builder移動しFile Inspector、 のチェックを外してUse 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

これは自動レイアウトが原因ですが、自動レイアウトが作業を行った後、またはその制約を変更した後に行うことができます。自動レイアウトの後にやりたい場合は、以下を追加してください。

- (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]通常、FirstResponder に使用されます。私はあなたのカスタムビューについてあまり考えていませんが、使用できるフレームを設定するだけだと思います:

[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 に答える