java自动布局框架,自动布局,约束和旋转

我遇到了自动布局和约束的问题,可以使用一些帮助 .

我在iPad上运行此应用程序 . 我有一个包含两个视图的窗口,一个UIWebView和一个MKMapView . 这两个视图都在IB中设置,并且打开了自动布局 . UIWebView位于窗口的顶部,MKMapView位于底部 . 每个视图占据窗口的近一半 . UIWebView在IB中设置了以下约束:NSLayoutAttributeTop到Superview等于0,前缘到Superview等于0,后缘到Superview等于0,NSLayoutAttributeBottom到Superview等于480.MKMapView具有以下约束设置在IB中:NSLayoutAttributeTop到Superview等于480,前沿到Superview等于0,后沿到Superview等于0,NSLayoutAttributeBottom到Superview等于0 .

加载窗口时,实际上删除了MKMapView,因为我希望UIWebView占据整个屏幕,因为 Map 视图中没有数据显示 . 这是在我的updateDetailViews函数中完成的:

- (void)updateDetailViews

{

displayHeight = self.maximumUsableFrame.size.height;

viewDistance=displayHeight/2+centerMapButton.frame.size.height/2+16;

[detailMapView setTranslatesAutoresizingMaskIntoConstraints:NO];

[directoryWebView setTranslatesAutoresizingMaskIntoConstraints:NO];

if (mapViewVisible==true) {

webViewDistFromBottomDefault=viewDistance;

webViewDistFromBottom.constant=viewDistance;

mapViewDistFromTopDefault=viewDistance;

mapViewDistFromTop.constant=viewDistance;

}

else {

[detailMapView removeFromSuperview];

webViewDistFromBottomDefault=0;

webViewDistFromBottom.constant=0;

mapViewDistFromTopDefault=viewDistance;

mapViewDistFromTop.constant=viewDistance;

}

[detailMapView setNeedsUpdateConstraints];

[UIView animateWithDuration:0.25f animations:^{

[self.detailMapView layoutIfNeeded];

}];

}

删除MKMapView后,UIWebview的NSLayoutAttributeBottom属性设置为0,它将填满整个屏幕 . 一旦有 Map 中显示的实际数据,就会添加MKMapView,并在我的displayMapView函数中重新定位UIWebView以及必要的约束:

- (void)displayMapView

{

double dblLatitude;

double dblLongitude;

[detailMapView setTranslatesAutoresizingMaskIntoConstraints:NO];

if ([self isMapViewDisplayed]==FALSE) {

[detailView addSubview:detailMapView];

NSLayoutConstraint *myConstraint =[NSLayoutConstraint

constraintWithItem:detailMapView

attribute:NSLayoutAttributeTop

relatedBy:NSLayoutRelationEqual

toItem:detailView

attribute:NSLayoutAttributeTop

multiplier:1.0

constant:mapViewDistFromTopDefault];

[detailView addConstraint:myConstraint];

//mapViewDistFromTop.constant = mapViewDistFromTopDefault;

myConstraint =[NSLayoutConstraint

constraintWithItem:detailMapView

attribute:NSLayoutAttributeBottom

relatedBy:NSLayoutRelationEqual

toItem:detailView

attribute:NSLayoutAttributeBottom

multiplier:1.0

constant:0];

[detailView addConstraint:myConstraint];

myConstraint =[NSLayoutConstraint

constraintWithItem:detailMapView

attribute:NSLayoutAttributeLeading

relatedBy:NSLayoutRelationEqual

toItem:detailView

attribute:NSLayoutAttributeLeading

multiplier:1.0

constant:0];

[detailView addConstraint:myConstraint];

myConstraint =[NSLayoutConstraint

constraintWithItem:detailMapView

attribute:NSLayoutAttributeTrailing

relatedBy:NSLayoutRelationEqual

toItem:detailView

attribute:NSLayoutAttributeTrailing

multiplier:1.0

constant:0];

[detailView addConstraint:myConstraint];

[detailMapView setNeedsUpdateConstraints];

}

[UIView animateWithDuration:.5

animations:^{

webViewDistFromBottom.constant=webViewDistFromBottomDefault;

mapViewDistFromTop.constant=mapViewDistFromTopDefault;

[self.directoryWebView layoutIfNeeded];

[self.detailMapView layoutIfNeeded];

}];

[self updateDetailViews];

...

if ((dblLatitude != 0) && (dblLongitude != 0)) {

zoomLocation.latitude = dblLatitude;

zoomLocation.longitude = dblLongitude;

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, METERS_PER_MILE, METERS_PER_MILE);

MKCoordinateRegion adjustedRegion = [detailMapView regionThatFits:viewRegion];

[detailMapView setRegion:adjustedRegion animated:YES];

}

CLLocationCoordinate2D coordinate;

coordinate.latitude = dblLatitude;

coordinate.longitude = dblLongitude;

...

[detailMapView addAnnotation:annotation];

}

所有这些都像我打算的那样 . 旋转设备时会出现此问题 . 如果我以纵向模式启动iPad,则webViewDistFromBottom和mapViewDistFromTop约束设置为490,因为上面的updateDetailViews函数具有以下计算:

displayHeight = self.maximumUsableFrame.size.height;

viewDistance=displayHeight/2+centerMapButton.frame.size.height/2+16;

如果将iPad旋转为横向,则调用willAnimateRotationToInterfaceOrientation函数,然后调用updateDetailViews,将viewDistance设置为367(相应地为webViewDistFromBottom.constant和mapViewDistFromTop.constant) . 顶部的UIWebView看起来应该如此,但是底部的MKMapView却没有 . mapViewDistFromTop约束设置为367(如果我将值输出到日志),但它似乎仍然设置为490.我的updateDetailViews函数调用[self.view layoutIfNeeded](我也尝试过[detailMapView layoutIfNeeded], [detailMapView setNeedsLayout]),但该视图未正确显示 . 距离顶部的距离太大 . 如果我将iPad旋转回肖像,它看起来很好 .

如果iPad以横向模式启动,然后旋转为纵向,我也会遇到同样的问题 . 在横向模式下,mapViewDistFromTop和webViewDistFromBottom值为367,一旦旋转为纵向,则设置为490 . 但是,底部的MKMapView看起来与顶部的距离仍然是367,覆盖了太多的显示器 .

知道我做错了什么吗?在此先感谢您的任何帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值