2016-09-11 3 views
1

UIViewにカテゴリを作成して、プログラムによる位置付けとビューのサイズ変更を容易にします。私は、特定のビューを水平または垂直にその中心に配置するメソッドを作成したいと考えています。superviewだから私は、次のような何かを行うことができます:スーパービュー内でビューを中央に揃えようとしています

カテゴリー

- (void)centerHorizontally { 
    self.center = CGPointMake(self.window.superview.center.x, self.center.y); 
} 

- (void)centerVertically { 
    self.center = CGPointMake(self.center.x, self.window.superview.center.y); 
} 

使用しかし

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)]; 
[v centerHorizontally]; 

、これは動作していないようです。私の解決策は間違っていますか?

+0

@SathiReddy - 不必要なタグを1つ追加するだけで、不必要に編集を中止してください。編集は便利で完全でなければなりません。タグを追加するだけではありません。質問に間違っている可能性があるすべてのものを修正します。この場合、何もしないでください。ほとんどのタグ編集候補は不要です。 – rmaddy

答えて

2

ビューを中央に配置する前に、そのビューを親ビューに追加する必要があります。

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)]; 
[someOtherView addSubview:v]; 
[v centerHorizontally]; 

あなたのカテゴリは間違っています。窓を巻き込まないでください。スーパービューのサイズに基づいて設定する必要があります。

- (void)centerHorizontally { 
    self.center = CGPointMake(self.superview.bounds.size.width/2.0, self.center.y); 
    // or 
    self.center = CGPointMake(CGRectGetMidX(self.superview.bounds), self.center.y); 
} 

- (void)centerVertically { 
    self.center = CGPointMake(self.center.x, self.superview.bounds.size.height/2.0); 
    // or 
    self.center = CGPointMake(self.center.x, CGRectGetMidY(self.superview.bounds)); 
} 
+0

あなたは 'bounds.size.width'と' bounds.size.height'を意味すると思いますが、ありがとうございます! – Apollo

+0

はい、修正されました。ありがとう。 – rmaddy

関連する問題