【问题标题】:Incorrect vertical position for UIBarButtonItems in UIToolbar for iOS 7iOS 7 的 UIToolbar 中 UIBarButtonItems 的垂直位置不正确
【发布时间】:2013-10-15 03:38:32
【问题描述】:

我有这段代码用于 iPad 应用程序,它适用于 iOS 7 以下的任何 iOS

UIToolbar* tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 75, 44)];

NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:2];

UIBarButtonItem *composeButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(toggleDelete:)];

[buttons addObject:composeButton];

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];

fixedSpace.width = 5;

[buttons addObject:fixedSpace];

UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(touchMe:)];

[buttons addObject:bi];

[tools setItems:buttons animated:NO];

tools.barStyle = -1;

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];

[bi release];
[fixedSpace release];
[composeButton release];
[buttons release];    
[tools release];

这个pre iOS 7的结果是:

在 iOS 7 上运行相同的代码会产生以下结果:

由于某种原因,按钮在 iOS 7 中被移到了工具栏的底部。

现在,我可以使用 UIBarItem imageInset 属性重新定位它们,但这似乎有点骇人听闻,因为那时我需要检查 iOS 版本,并且只有在 iPad 运行 iOS 7+ 时才执行 imageInset。我的问题是我是否遗漏了与 UIToolbar 相关的 iOS 7 特有的任何内容?我查看了 iOS 7 UI 转换指南,但找不到任何特定于此问题的内容。

【问题讨论】:

    标签: ios objective-c ipad ios7 uitoolbar


    【解决方案1】:

    由于我没有得到任何其他答案并找到适合我的解决方法,我将为遇到相同问题的其他人回答这个问题。如果您的目标是 iOS 5.0 及更高版本,有一种方便的方法可以将多个项目添加到右侧栏按钮。这是修复:

    [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:deleteButton, bi, nil]];
    

    【讨论】:

    • 谢谢,但此更改并没有解决我的问题。进行此更改后,我仍然有相同的错误垂直偏移。编辑:但是,当我将您的答案与指定每个 Bond007 答案的宽度结合起来时,一切看起来都不错。
    • @dacoinminster 感谢您添加信息。我在这个问题上花了相当多的时间,但似乎有不同的解决方案。
    【解决方案2】:

    在设计器(故事板)中检查您的工具栏。确保为工具栏上的所有按钮指定宽度。我有类似的问题,在我为故事板工具栏中的每个按钮指定宽度后,它已经消失了,现在按钮在 iOS 7 的工具栏中正确定位。

    【讨论】:

    • 我正在以编程方式添加工具栏。
    • 我也有这个案例,工具栏上有系统项目。我已经通过将工具栏框架设置为 CGRectZero 然后在下一行设置工具栏框架来更正父表格视图单元格的 layoutSubviews 方法中的框架来解决它。
    • 我将此答案与 bizsytes 的自我答案结合起来,这两个答案共同解决了我的问题。
    • 我有一个类似的问题,栏按钮项目将在 iOS 7 中正确显示,但在 iOS 6 中不正确。设置栏按钮项目的宽度解决了该问题,现在按钮正确对齐两个 iOS 系统上的纵向和横向模式。
    【解决方案3】:

    使用 CGRectZero 创建 UIToolbar 并在 setItems 之后设置它的框架:解决了我在 iOS 7 上的问题。

    UIToolbar *tools = [[UIToolbar alloc] initWithFrame:CGRectZero];
    //Create array with items
    [tools setItems:buttonsArray animated:NO];
    //Setting frame at this moment fixes the issue    
    tools.frame = toolbarFrame;
    

    【讨论】:

    • 是的,这里也一样。谢谢!
    【解决方案4】:

    我只有 iOS7 有这个问题。 iOS8 总体上可以完美运行。解决办法是toolbar的高度是44.0,我设置了delegate UIBarPositioning,item的位置在top:

    - (UIBarPosition) positionForBar: (id<UIBarPositioning>) bar {
        return UIBarPositionTop;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2013-02-05
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多