У нас есть пользовательский вид с панелью инструментов UIPickerView plus (216 + 44). Во время init (viewDidLoad) это настраиваемое представление помещается под экраном, используя следующий фрагмент кода.Незначительная проблема с позиционированием при наличии tabBar
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;
он отлично работает, где вид находится прямо над панелью вкладок.