ビューに何らかの種類を追加するUIDynamicBehavior
と、デバイスが回転したときに完全に壊れます。これが縦向きのものです(正しく表示されています):
そして、ここに横向きで、すべて壊れています:
追加する呼び出しを削除するUIDynamicBehavior
と、自動レイアウトの問題がなく正常に動作するため、自動レイアウトの問題ではないと思います。自動レイアウト エラーもスローされません。コードは次のとおりです。
@interface SWViewController () {
UICollisionBehavior *coll;
UIDynamicAnimator *dynamicAnimator;
}
@implementation SWViewController
- (void)viewDidLoad {
[super viewDidLoad];
dynamicAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self setupCollisions]; // commenting this out fixes the layout
}
- (void)setupCollisions {
NSArray *dynamicViews = @[greenView];
coll = [[UICollisionBehavior alloc] initWithItems:dynamicViews];
CGFloat topBound = CGRectGetMinY(greenView.frame);
[coll addBoundaryWithIdentifier:@"top"
fromPoint:CGPointMake(0, h1)
toPoint:CGPointMake(CGRectGetWidth(greenView.frame), h1)];
[dynamicAnimator addBehavior:coll];
}
オーバーライドdidRotateFromInterfaceOrientation
すると、の上部の境界が自動レイアウトのgreenView
指示に従っていないことがわかります (setupCollisions
これを修正するための呼び出しを削除します)。
自動レイアウトの境界は次のgreenView
とおりです。
height = 200
trailing space to Superview = 0
leading space to Superview = 0
bottom space to Superview = 0