【问题标题】:How to align UIBarButtonItem in UIToolbar in iOS universal app?如何在 iOS 通用应用程序的 UIToolbar 中对齐 UIBarButtonItem?
【发布时间】:2014-10-09 02:50:20
【问题描述】:

我想在我的 iOS 通用应用程序中将两个 UIBarButtonItem 实例放在 UIToolbar 中,第一个项目位于工具栏的左边缘,第二个项目位于中心。但是,这似乎无法在 Interface Builder 中完成,because the auto layout doesn't support forcing constraints on UIBarButtonItem class due to the fact that it is not a subclass from UIView

请注意,我不想将第一个按钮放在左边缘而第二个按钮放在右边缘 - 我必须将第二个按钮放在中间。另外,我没有计划使用第三个按钮来将它们以相等的间隔对齐为左、中和右。

在这种情况下,是否仍然可以在情节提要中添加这样的约束?我使用 Xcode 6 beta 5。

【问题讨论】:

    标签: ios xcode swift autolayout uibarbuttonitem


    【解决方案1】:

    您可以在情节提要中完成所有操作。

    在对象库中选择一个Bar Button Item 并将其拖到您的Toolbar 中。在其右侧添加Flexible Space Bar Button Item。在其右侧添加您的第二个Bar Button Item。然后,在其右侧添加第二个Flexible Space Bar Button Item

    界面生成器中的结果将如下所示:

    如有必要,您可以在Toolbar 的右边缘添加一个额外的Fixed Space Bar Button Item,以确保您的第二个Bar Button Item 真正居中。

    用户 lxt 在回答类似问题here 时给出了另一个示例。

    编辑:在继续之前确保您的 UIToolbar 具有良好的约束!

    【讨论】:

    • 你试过运行模拟器了吗?实际上我在发布这个问题之前尝试过,但它在左右边缘放置了两个条形按钮。
    • 我又试了一次,还是不行。您是否选择了通用应用模板?
    • 这个答案也适用于我。我打算建议在右边缘添加一个零宽度的固定空间,但随着 flexispaces 增长到可能的最大值(答案也表明,doh!),它没有任何区别。 @Gardecolo 您可以发布当前非工作视图层次结构的屏幕截图(IB 的左侧)
    • 谢谢,沃伦。我知道它不适用于我的应用程序的原因是因为我没有在工具栏的水平边缘添加约束,并且因为“实际中心位置”显示在“4英寸 iPhone 的右边缘” “,我没有意识到这是问题的根源。添加-16水平约束使其在iPhone和iPad上都能正常工作。
    • 你说得对:我没有在我的帖子中提到我在将自动布局约束添加到我的 viewController 场景之后就将它添加到了工具栏。嗯,事实上,这是问题的一部分......
    【解决方案2】:

    您可以通过编程方式完成此操作

    UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    
    UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item1" style:UIBarButtonItemStylePlain target:self action:nil];
    UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"item2" style:UIBarButtonItemStylePlain target:self action:nil];
    UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithTitle:@"item3" style:UIBarButtonItemStylePlain target:self action:nil];
    
    self.toolbarItems = [NSArray arrayWithObjects: item1, flexible, item2, flexible, item3, nil];
    

    如果您想了解更多详情,请查看此链接

    How to place UIBarButtonItem on the right side of a UIToolbar?

    【讨论】:

    • 由于某种原因,当我添加 *flexible 时,它只是将我所有的 BarButtonItems 堆叠在一起。
    【解决方案3】:

    我认为您应该尝试灵活的栏按钮空间项目,并且为了更加低调,我正在分享一个链接,所以看看它可能会对您有所帮助

    UIToolbar and Flexable/Fixed bar button items

    【讨论】:

      【解决方案4】:

      添加工具栏的代码:

      这里的固定宽度可以是可变的。因此,您可以将其保持在尽可能远的位置,以便将第二个按钮保持在中心。

      UIBarButtonItem *fixedItemSpaceWidth = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
      
          fixedItemSpaceWidth.width = 200.0f; // or whatever you want
      
          UIBarButtonItem *doneBarButton  = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonAction:)];
      
                  UIBarButtonItem *cancelBarButton  = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonAction:)];
      
                  // Initialise toolabr
                  UIToolbar *toolbar          = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-44, 320, 44)];
                  //toolbar.barStyle = UIBarStyleBlack;
                  toolbar.items               = [NSArray arrayWithObjects:cancelBarButton,fixedItemSpaceWidth,doneBarButton, nil];
              [self.view addSubview:toolbar];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多