Nếu tôi thêm bất kỳ loại UIDynamicBehavior
vào chế độ xem của mình, nó sẽ phá vỡ hoàn toàn mọi thứ khi thiết bị được xoay. Dưới đây là nó là gì trong bức chân dung (hiển thị một cách chính xác):UIDynamics và Xoay thiết bị
Và ở đây nó là trong bối cảnh, tất cả đã phá vỡ:
Tôi không tin rằng đó là một vấn đề autolayout vì nếu tôi loại bỏ các cuộc gọi để thêm các UIDynamicBehavior
nó hoạt động tốt với không có vấn đề autolayout. Không có lỗi autolayout bao giờ được ném một trong hai. Dưới đây là các mã:
@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];
}
Nếu tôi ghi đè didRotateFromInterfaceOrientation
Tôi có thể thấy rằng ranh giới đầu greenView
không làm theo những gì autolayout nói nó nên (một lần nữa, loại bỏ các cuộc gọi đến setupCollisions
bản sửa lỗi này).
Các ranh giới autolayout trên greenView
là:
height = 200
trailing space to Superview = 0
leading space to Superview = 0
bottom space to Superview = 0
Xin chào, tôi thấy bạn đang sử dụng Hành vi Va chạm ở đây. Điều này làm gì mà không có hành vi trọng lực? Cảm ơn. – Unheilig
Trong ví dụ này, tôi thậm chí không sử dụng một hành vi trọng lực. Nếu tôi chuyển nó ra nó cũng giống như vậy. – swilliams
Tôi rất muốn giới thiệu xem các video WWDC về chủ đề này. Phiên 206 và 221 từ năm nay. https://developer.apple.com/wwdc/videos/ Tạo câu hỏi của riêng bạn trên SO nếu bạn có chúng. – swilliams