相对于标签指示器的位置视图

时间:2013-05-14 19:15:09

标签: ios objective-c cocoa-touch

我获得了一个使用UITabBarController的用户界面,在其中一个标签ViewControllers中,View(箭头为UIImageView)需要相对于标签指示器定位(箭头需要指向指示器,沿x轴居中)。我使用基本数学来模拟基于已知变量的位置,并且它在横向和纵向方向上适用于iPhone / Pod,但在iPad上失败(在两个方向上都有点偏右 - 在景观中看起来更糟糕但可能只是我的感受。)

以下是我使用的内容:

int visibleWidth = self.view.frame.size.width;
int tabBarSize = self.tabBarController.tabBar.frame.size.width;
int tabSize = tabBarSize / [self.tabBarController.viewControllers count];
int tabPosition = 2; // hint should point at the 3rd tab
int arrowIconWidth = hintIcon.image.size.width;
int arrowIconHeight = hintIcon.image.size.height;

int tabEmulationPosition = visibleWidth / 2 - tabBarSize / 2;
int tabOffsetPosition = tabEmulationPosition + ( tabSize * tabPosition );
int iconPosition = tabOffsetPosition + ( tabSize / 2 - arrowIconWidth / 2 );

有没有比试图“伪造”数学更好的方法(也许是getBoundingClientRect类型的方法?)或者数学方法是最好的选择,假设我有一个正确的缺陷?

TYIA

1 个答案:

答案 0 :(得分:0)

除了一个警告之外,你的数学似乎还不错:核心图形距离的类型都是CGFloat而不是int。请记住,整数除法在C中的工作方式与您预期的不同:

int x = 5 / 2; // x == 2

因此,请将int替换为CGFloat s并除以2.0而不是2。

此外,在iPad中,标签按钮不一定在整个条形上均匀分布,但在左右两侧都有一定的填充。你必须摆弄找到合适的常数,或者通过实验找到一种可靠的方法来根据视图控制器的数量来计算它。

假设标签栏按钮宽度固定,您可以计算要添加到图像x的偏移量:

CGFloat tabSize = 
   FIXED_TAB_BUTTON_WIDTH * self.tabBarController.viewControllers.count;
CGFloat offset = (tabBarSize - tabSize) / 2.0;