私も同じ問題を抱えていました。スクロールビューに複数のUIViewを追加したいチュートリアルビューを作成していました。xib からフレームを取得しようとしている間、常に 320 が返されました。そのため、ページのオフセットが間違っていて、iPhone6 および 6plus でのビューが粗雑に見えました。
次に、純粋な自動レイアウト アプローチを使用しました。つまり、フレームを使用する代わりに、VFL を使用して制約を追加し、サブビューがスーパービューに正確に収まるようにしました。以下は、Xib から約 20 個の UIView を作成し、スクロールビューに適切に追加するコードのスナップショットです。
完全なコードはこちらScrollViewAutolayout
Method to layout the childviews in the scrollview.
@param nil
@result layout the child views
*/
-(void)layoutViews
{
NSMutableString *horizontalString = [NSMutableString string];
// Keep the start of the horizontal constraint
[horizontalString appendString:@"H:|"];
for (int i=0; i<viewsArray.count; i++) {
// Here I am providing the index of the array as the view name key in the dictionary
[viewsDict setObject:viewsArray[i] forKey:[NSString stringWithFormat:@"v%d",i]];
// Since we are having only one view vertically, then we need to add the constraint now itself. Since we need to have fullscreen, we are giving height equal to the superview.
NSString *verticalString = [NSString stringWithFormat:@"V:|[%@(==parent)]|", [NSString stringWithFormat:@"v%d",i]];
// add the constraint
[contentScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:verticalString options:0 metrics:nil views:viewsDict]];
// Since we need to horizontally arrange, we construct a string, with all the views in array looped and here also we have fullwidth of superview.
[horizontalString appendString:[NSString stringWithFormat:@"[%@(==parent)]", [NSString stringWithFormat:@"v%d",i]]];
}
// Close the string with the parent
[horizontalString appendString:@"|"];
// apply the constraint
[contentScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:horizontalString options:0 metrics:nil views:viewsDict]];
}