奇怪的定位问题时的TabBar存在(Weird positioning issue when tab

2019-09-17 00:28发布

我们有一个UIPickerView加工具栏(216 + 44)的自定义视图。 在初始化时间(viewDidLoad中)该自定义视图屏幕下方使用下面的代码段推动。

   CGPoint newOrigin;
   newOrigin.x = pickerViewOutlet.frame.size.width/2;
   newOrigin.y = self.view.frame.size.height + ((pickerViewOutlet.frame.size.height)/2);
   NSLog(@"%f,%f",self.view.frame.size.height,(pickerViewOutlet.frame.size.height)/2);
   pickerViewOutlet.center = CGPointMake(newOrigin.x, newOrigin.y);

当一个按钮被点击该视图是使用下面的代码段上拉。

   [self.view bringSubviewToFront:pickerViewOutlet];
   NSLog(@"tabbar %f",self.tabBarController.tabBar.frame.size.height);
   CGPoint showOrigin;
   showOrigin.x = pickerViewOutlet.frame.size.width/2;
   showOrigin.y = pickerViewOutlet.center.y - pickerViewOutlet.frame.size.height;
      //self.tabBarController.tabBar.frame.size.height ;
   NSLog(@"showpicker %f,%f",pickerViewOutlet.center.y,pickerViewOutlet.frame.size.height);
   [UIView beginAnimations:nil context:NULL];

   [UIView setAnimationBeginsFromCurrentState:YES];

   [UIView setAnimationDuration:0.5];
   pickerViewOutlet.center=CGPointMake(showOrigin.x, showOrigin.y);


   [UIView commitAnimations];
   [pickerCtrlOutlet reloadAllComponents];

这工作得很好。 然而,这并不在即使代码被修改为在网页上的底部标签栏控制器的存在工作(视图的一部分是标签栏下方)

showOrigin.y = pickerViewOutlet.center.y - pickerViewOutlet.frame.size.height -  self.tabBarController.tabBar.frame.size.height ;

但是,如果上述代码被修改为

showOrigin.y = pickerViewOutlet.center.y - pickerViewOutlet.frame.size.height -  self.tabBarController.tabBar.frame.size.height - 90;

它完美的作品,其中的观点是正确的标签栏的上方。

Answer 1:

据我所知,在viewDidLoad中的self.view尚未加入上海华盈,因此帧未设置为正确的大小。

例如,你可以设计InterfaceBuilder下一个UIView,这将有320x460。 当你将它添加到上海华这实际上因为底部标签栏变小。 自动调整机制有助于在这个问题上。

所以,我觉得你定位使用viewDidLoad中和错误的值,那么当您使用新的相对于其旧的位置,它仍然是错误的选择器视图。

这是我怎么会这样写:

   [self.view bringSubviewToFront:pickerViewOutlet];
   NSLog(@"tabbar %f",self.tabBarController.tabBar.frame.size.height);
   CGPoint showOrigin;

   showOrigin.x = pickerViewOutlet.frame.size.width/2;
   //Notice this line -----------
   showOrigin.y = self.view.frame.size.height - pickerViewOutlet.frame.size.height / 2;

      //self.tabBarController.tabBar.frame.size.height ;
   NSLog(@"showpicker %f,%f",pickerViewOutlet.center.y,pickerViewOutlet.frame.size.height);
   [UIView beginAnimations:nil context:NULL];

   [UIView setAnimationBeginsFromCurrentState:YES];

   [UIView setAnimationDuration:0.5];
   pickerViewOutlet.center=CGPointMake(showOrigin.x, showOrigin.y);


   [UIView commitAnimations];
   [pickerCtrlOutlet reloadAllComponents];

注意showOrigin.y = self.view.frame.size.height - ...

和(对于:)你可以设置选择器视图,以灵活的顶部(或在自动尺寸口罩加分锁定底部坐标)。 如果你这样做,即使你位置viewDidLoad中选择器视图,然后self.view调整大小时,pickerview也将改变它的位置。



文章来源: Weird positioning issue when tabBar is present