UINavigationBar と UIScrollView を含む ViewController があります。スクロール ビュー内に、ページング タイプのものを作成するために他のビューを配置しています。私はこれを完全に機能させましたが、UIScrollView 内のすべての座標値が 2 倍になっているにもかかわらず、要素が .frame.origin で正しい座標を返すという非常に奇妙なことを回避する必要がありました。
これがなぜなのかわからず、検索しても何も見つからなかったので、間違っているに違いないと思い、テストを実行しました。
上記のシナリオを作成しましたが、背景に 10x10 ピクセル グリッドの測定画像を配置しました。viewController の viewDidLoad でこれを実行しました。
[super viewDidLoad];
// Size to fit the screen
float height = [[UIScreen mainScreen] bounds].size.height;
height -= [UIApplication sharedApplication].statusBarFrame.size.height;
height -= self.navBar.frame.origin.y;
height -= self.navBar.frame.size.height;
CGRect frame = self.scrollView.frame;
frame.size.height = height;
self.scrollView.frame = frame;
frame.origin.y = 10;
testUIView *testView = [[testUIView alloc] initWithFrame:frame];
[self.scrollView addSubview:testView];
結果は私の最も暗い恐怖を確認しました。グリッドは、10 ピクセルの 2 つのブロックを示す testView の下に表示されます。値は確かに 2 倍になっていますが、これはなぜですか?どうすればよいでしょうか?
[編集]
興味深いことに、挿入されるビューのコードは次のとおりです。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[[NSBundle mainBundle] loadNibNamed:@"testUIView" owner:self options:nil];
self.view.frame = frame;
[self addSubview:self.view];
[self.spinner startAnimating];
}
return self;
}