2017-02-03 28 views
0

プログラムで作成し、プログラムで作成してビューに追加したstack_viewに追加しようとしています。 これはコードです:プログラムで追加されたビューは表示されません

の.h

@interface ViewController : UIViewController 

@property (strong, nonatomic, nullable) UIStackView * stack; 

@end 

.M

@implementation viewController 

@synthesize stack; 


- (void) viewDidLoad { 
[super viewDidLoad]; 
CGRect * vframe = self.view.frame; 

// - Option 1 
stack = [[UIStackView alloc] initWithFrame:CGRectMake(vframe.origin.x, 100,vframe.size.width,300)]; 
stack.axis = UILayoutConstraintAxisHorizontal; 
stack.aligment = UIStackViewAligmentTop; 
stack.distribution = UIStackViewDistributionFill; 
[self.vew addSubview:stack]; 

// Option 2 
// stack.traslateAutorezisingMaskIntoConstraints = NO; 
// [stack.leadingAnchor constraintsEqualToAnchor: self.view.leadingAnchor].active = YES; 
// [stack.topAnchor constraintsEqualToAnchor: self.view.topAnchor constant: 100].active = YES; 


UIView * pView = [[UIView alloc] init]; 
pView.backgroundColor = [UIColor blueColor]; 
[stack addArrangedSubview:pView]; 
} 

@end 

このコードは(私はオプション2を証明しようとした、全くのビューが表示されませんコードにコメントされているようです)、どちらもうまくいきません。スタックに挿入されると、そのビューの分布が「塗りつぶし」なので、スタックのサイズを取得することは想定されていません。これは、フレーム= CGRectMakeRect(0,0、self.view.frame.size.width、100)でPviewを定義した場合でも、どちらも動作しません。

私が間違っていることを誰にでも教えてください。

EDIT:私はすでに、コードでスペルミスを修正しました(CGRectの*とself.viewの代わりにself.vew)。私は手動でコードをコピーしていたときにこれらの間違いを犯しました。コードをコピー&ペーストしませんでした。それらを作っている理由THAのであり、元のコードがviewDidLoadでも

答えて

0

これを最初に診断するには、pViewをテストします。 CGRectMake(100,100,100,100)のような固定サイズで初期化し、viewContoller'sビューに直接追加します。深刻な問題がなければ、問題は見えません。

これがうまくいく場合は、固定サイズのUIStackViewをお試しください。必要に応じてその背景を色づけしてください。あなたはまだそれを見ていない場合は、のviewDidAppearに正しいフレームがまだあることを確認してください。作成後に調整された可能性があります。それが正しい場合は、シミュレータにXcodeのHeirachyを入れてから、Debug -> View Debugging -> Capture View Heirachyに行ってください。あなたがそこにそれを参照してくださいいけない場合は、サブビューとして追加問題がありました(タイプミス[self.vew addSubview:stack]に注意してください;)

それがうまくいけば、その後[stack addArrangedSubview:pView]に問題があります。前の手順と同様に、UIStackViewviewDidAppearの配列されたすべてのサブビューをviewControllerにループします。

+0

あなたの答えAndrew McKinleyに感謝します。私はあなたが私に示唆していることを行います。これは私の発見です:2)固定サイズ(CGRectMake(100,100,100,100))のpviewのみをテストし、self.viewに追加すると、 b)固定サイズ(CGRectMake(100,100,100,100))のstackViewのみを作成し、self.viewに追加すると機能しません。また、そのサイズがviewDidAppearの100の幅と100の高さであることを確認しています。あなたが言及したタイプミスが元のコードではなかったので、そのミスを修正するために質問を編集します。どうしたらいいの? – Airel

+0

@AirelはCapture View Heirachyでそれを見ることができますか? viewDidAppearには、== self.viewというスーパービューがありますか?この時点でpViewを追加するべきではありません。私たちは、UIStackViewがviewControllerに追加されたかどうかを確認しています。 –

+0

私はすでにキャプチャビュー階層内にスタックを見ており、それはself.viewであるスーパービューです。私は[stack addArrangedSubview:pView]を実行したときに、PviewがスタックビューのArrangedSubviews配列に正しく追加されているかどうかを確認するために、この同じ方法を使用します。 – Airel

0
CGRect vframe = self.view.frame; 

コンパイルなぜそれがあなたのself.view.frameがまだ計算されていない、です。 viewDidLayoutSubviewsまたはviewDidAppearでこれを行う必要があります。これらの両方が複数回呼び出されるので注意が必要です。

EDIT
danhて以下で示唆したように(私はそれを見落とし)あなたも、あなたのコード内のいくつかのスペルミスを持って、このコードは実際にも、用にコンパイル方法がわからない、上記の行から*を削除する必要があります君は。

+1

CGRect *にCGRect構造体を割り当てると、おそらくコンパイルされません。それがどのようにOPに入ったのかわからない。 – danh

+0

@ダンええ、あなたは正しいです、私はそれを見落としました。また、彼は "[self.vew addSubview:stack];というようにいくつかのスペルミスがあることに気付きました。彼の質問では、これが本当に彼のためにどのように笑ったのか知らない。 –

+0

danhさん、ありがとうございました...私は既に質問を編集しましたが、これらの間違いは元のコードではありませんでした...とにかくおかげです – Airel

関連する問題