私は、境界が丸いセルを持つ静的なテーブルビューを持っています。私は、私の自動レイアウトの制約が働いている間に境界線が常に正しい幅ではないということを、異なるシミュレータでテストすることに気づきました。この特定の画面は、UIView
が埋め込まれたビューコントローラで構成されています。tableViewController
viewDidAppearでUIを正しく設定することはできますか? viewWillAppear/viewDidLoadではなく
私はいくつかの調査を行いましたが、実際にはストーリーボードの幅に依存しています。これは、iPhone 8用のストーリーボードを持っていると、8+のセルが短すぎることになり、8+のストーリーボードでは、8のストーリーボードで長すぎる(そしてスクリーンから外れる)という結果になります。
現在私はviewDidAppear
以内にこのコードを実行する場合
- (void)configureCellThree {
//Add Border
CALayer *borderLayer = [CALayer layer];
CGRect borderFrame = CGRectMake(0, 0, (_contentCellThree.frame.size.width), (_contentCellThree.frame.size.height));
[borderLayer setBackgroundColor:[[UIColor clearColor] CGColor]];
[borderLayer setFrame:borderFrame];
[borderLayer setCornerRadius:_contentCellThree.frame.size.height/2];
[borderLayer setBorderWidth:1.0];
[borderLayer setBorderColor:[kTextColor2 CGColor]];
// [borderLayer setOpacity:0.5];
[_contentCellThree.layer addSublayer:borderLayer];
}
は今、すべてが両方のデバイス間で動作します。私はのviewDidLoadでセルの枠線を設定しています、ここで私は、セルの境界線を設定するために使用していたコードです。私はいくつかのログをメインビューコントローラに追加して、どのように設定されているかを調べました。
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"VDL - SELF.VIEW = %@", self.view);
NSLog(@"VDL - CONTAINER VIEW = %@", self.profileScrollingContainerView);
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"VDA- SELF.VIEW = %@", self.view);
NSLog(@"VDA - CONTAINER VIEW = %@", self.profileScrollingContainerView);
}
私はのviewDidLoadは、ストーリーボードの代わりに、(右ていないようだ)ビュー自体からのサイジング情報を使用していたことを疑われていました。このログによってこれが確認されます。 UIView
が私のテーブルビューの表示を担当している場合、ストーリーボードが8+に設定されている場合、それは次のフレーム属性:X = 0, Y = 349, W = 414, H = 338
を持っています。今度はログの結果を見てみましょう。
VDL - SELF.VIEW = <UIView: 0x7fa545401f10; frame = (0 0; 375 667);
VDL - CONTAINER VIEW = <UIView: 0x7fa545401b50; frame = (0 349; 414 338);
VDA- SELF.VIEW = <UIView: 0x7fa545401f10; frame = (0 64; 375 603);
VDA - CONTAINER VIEW = <UIView: 0x7fa545401b50; frame = (0 285; 375 269);
ビューが読み込まれると、ビューサイズに関する誤った情報が表示されます。 viewDidAppear
が呼び出されると、ビューのサイズが正しく設定され、正しく動作します。私の問題は、私のviewDidAppearで初期化コードを呼び出すことはしたくないということです。
I read here that I should be putting my UI Geometry code into the viewWillAppear
ただし、これを試しても同じ問題が発生します。
VWA - CONTAINER VIEW = <UIView: 0x7fec04d97700; frame = (0 349; 414 338);
私の質問を統合するには、ビューをロード/表示する前にビューのプロパティを取得してUIを正しく設定するにはどうすればよいですか?
UIView
のサブクラス化が必要であり、潜在的にはsetFrame
を使用する必要があることを読んだが、実際にこれをどうやってどうやって行っているのかわからない。