【发布时间】:2013-09-27 20:28:09
【问题描述】:
如果我在视图中添加任何类型的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
【问题讨论】:
-
嗨,我看到你在这里使用了碰撞行为。如果没有重力行为,这会做什么?谢谢。
-
在这个例子中,我什至没有使用重力行为。如果我把它关掉,它会做同样的事情。
-
我强烈建议您观看有关该主题的 WWDC 视频。从今年开始的第 206 和 221 届会议。 developer.apple.com/wwdc/videos 如果你有关于 SO 的问题,请创建自己的问题。
标签: ios7 autolayout uikit-dynamics uicollisionbehavior uidynamicbehavior