调整大小的UIToolbar拒绝保持其UIBarButtonItem正确对齐

时间:2012-10-10 19:12:41

标签: objective-c ios cocoa-touch uibarbuttonitem uitoolbar

我的视图顶部有UIToolbar,需要在动画中调整大小。工具栏包含:

  • 使用系统项UIBarButtonItem(“+”按钮)
  • UIBarButtonSystemItemAdd
  • 使用自定义视图(标题)的UIBarButtonItem
  • UIBarButtonItem使用样式UIBarButtonItemStyleBordered(“编辑”按钮)

我在每个按钮之间使用间隔符添加这些按钮,这使标题保持在中心位置:

    [toolbar setItems: @[addButton, spacer, titleButton, spacer, editButton] animated:NO];

Original Size

工具栏调整得很好,两个按钮将其位置固定在外边缘。但是,标题按钮不会保留在工具栏的中心。相反,它似乎将其右边缘固定在同一位置,在其左侧创建一个空间。在动画期间,这给人的印象是它向右滑动。

Expanded Size

要清楚,我希望标题栏保持相同的宽度 - 我不希望它随着工具栏的增长而扩展。但我需要将标题保留在工具栏的中心。

由于UIBarButtonItem不是UIView,我不能(?)使用autoresizingmask功能。

如何将标题保留在工具栏的中央?

其他信息

这可能是因为“添加”和“编辑”按钮具有不同的宽度 - 当我只添加标题(任意一侧有间隔符)时,行为是正确的。

2 个答案:

答案 0 :(得分:0)

我知道它太糟糕了,你仍然可以使用自定义按钮作为条形按钮项目,并使用其中的添加/编辑按钮的图像。这样您就可以在任何地方设置按钮框架。所以你的按钮不会放在最正确的位置。

UIButton * addButton = [[UIButton alloc] init];
[addButton setBackgroundImage:<AddimageName> forState:UIControlStateNormal];
UIBarButtonItem * addItem = [[UIBarButtonItem alloc] initWithCustomView:addButton];

答案 1 :(得分:0)

事实证明,我遗漏了一个至关重要的细节。我手动将编辑按钮的width设置为50。

如果删除此项,则调整大小将按预期工作。但是,我无法控制编辑按钮的大小,我想将其设置为50,因此它与导航栏上的按钮匹配。

我找到了一个可行的解决方案。将“编辑”按钮的宽度保持为50.在“+”按钮后立即添加固定分隔符,并将其宽度设置为18(50 - “+”按钮的宽度)。这可以平衡标题两侧的项目。