0

我得到了一个使用 a 的 UI UITabBarController,并且在其中一个 tabbedViewControllers中, a View(作为 a 的箭头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

4

1 回答 1

0

你的数学似乎没问题,除了一个警告核心图形距离都不是类型。请记住,整数除法在 C 中的工作方式与您可能期望的不同:CGFloatint

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

因此,将您int的 s替换为CGFloats 并除以 2.0 而不是 2。

此外,在 iPad 中,选项卡按钮不一定在整个栏上均匀分布,但在左侧和右侧有一定的填充。您将不得不摆弄寻找合适的常数,或者根据视图控制器的数量通过实验找到一种可靠的方法来计算它。

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

CGFloat tabSize = 
   FIXED_TAB_BUTTON_WIDTH * self.tabBarController.viewControllers.count;
CGFloat offset = (tabBarSize - tabSize) / 2.0;
于 2013-05-14T19:35:16.800 回答