0

新しいUIViewCOntrollerオブジェクトを初期化しています。次に、ビューのステージの位置を設定しようとしましたが、問題が発生しています。

これが私が使用しているコードです注:このコードはアプリケーションのメインUIViewControllerのviewDidLoadメソッドに配置されます

UIViewController * cont = [[UIViewController alloc] init];  
    cont.view.backgroundColor = [UIColor redColor];  
    CGRect rect = CGRectMake(100, 0, 320, 480);  
    cont.view.frame = rect;  

このコードは、サブビューを(100,0)ではなく(0,0)に配置しています。ただし、320.01(幅の値)や480.01(高さの値)を使用するなど、小数を導入するとします。ビューは正しく配置されます。

正確な幅:320.0、高さ:480.0のサイズを使用すると、原点は常に(0,0)に設定されるようです!!!

これは少し奇妙です。なぜこれが起こっているのか、そしておそらくそれがどのように解決されるのかを誰かが説明できることを望んでいました。

乾杯 ....

4

3 に答える 3

1

cont.view の値を NSLog すると、nil であることがわかると思います。これは、何も起こっていない理由を説明しています。これは、UIViewController を作成する通常の方法ではありません。プログラムで作成することは間違いではありませんが、99.99% の確率で UIViewController サブクラスが .xib ファイルのメイン UIView で作成されます。新しく作成された UIViewController オブジェクトには nil の「ビュー」メンバーがあるため、.xib をロードすることによって、何らかの方法で初期化する必要があります。

MyViewController *vc = [[[MyViewController alloc] initWithNibName@"MyViewController" bundle:nil] autorelease];

または手動でビューを作成します。

MyViewController *vc = [[[MyViewController alloc] init] autorelease];
UIView *theView = [[[UIView alloc] initWithFrame:viewframe] autorelease];
vc.view = theView;

その後、ビューのフレームを思いのままに移動できますが、ビュー コントローラーのベース ビューを移動することは通常、やりたいことではありません。サブビューを作成してそれらを移動する必要があります。

于 2011-02-11T15:21:23.730 に答える
0

[[UIViewController alloc]init]間違っている。UIViewController の指定された初期化子は ですinitWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle。それでも、必ずしもviewアウトレットを実際の UIView にすぐに初期化するとは限りません。UIViewController をサブクラス化しviewDidLoad、そのサブクラスのメソッドでカスタマイズを実行する必要があります。

当面はそうなる可能性viewが高いnilので、何も起こらずに好きなプロパティを設定してみてください。

于 2011-02-11T15:21:14.453 に答える
0

使えるはずだと思います

-(void) loadView { 
  [super loadView];
  //create your views programmatically here
}

プログラムでviewControllerを作成し、IBを回避するため。通常、「view」プロパティが nil の場合、IB はこのメソッドを呼び出しますが、IB を使用しない場合は、view プロパティが nil にならないように上記のメソッドを含めるようにしてください。

于 2011-02-11T19:08:54.280 に答える