我可以将UIToolbar项目居中吗?

时间:2010-03-24 20:26:40

标签: iphone uilabel uibarbuttonitem uitoolbar

我在UIToolbar上放了一个标签(按照这个提示:Adding a UILabel to a UIToolbar)。

但是工具栏的左侧有一个按钮,因此灵活的空间会将标签从中心抛出,这就是我想要的位置。我可以以某种方式将此工具栏项目居中,以使其保持在工具栏的中心位置吗?

(已经尝试平衡按钮与虚拟固定空间,没有骰子。)

谢谢!

5 个答案:

答案 0 :(得分:36)

在您的中心项目的左侧和右侧添加一个灵活的空间项目,就像您一样。然后在末尾添加一个固定的空格项,并将宽度设置为左按钮宽度的任何值 - 大约28像素。

UIBarButtonItem *fixedItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:NULL] autorelease];
fixedItem.width = 28;

答案 1 :(得分:6)

要在工具栏上居中显示文字/标题,您可以使用简单的UILabel,如下所示:

UILabel *labelTitle = [[UILabel alloc] init];
labelTitle.font =[UIFont fontWithName:@"Helvetica-Bold" size:18];
labelTitle.backgroundColor = [UIColor clearColor];
labelTitle.textAlignment = UITextAlignmentCenter;
labelTitle.userInteractionEnabled = NO;
labelTitle.text = @"Your Title";
[labelTitle sizeToFit];
CGRect labelTitleFrame = labelTitle.frame;
labelTitleFrame.size.width = self.toolbar.bounds.size.width;
labelTitleFrame.origin.y = (self.toolbar.bounds.size.height - labelTitleFrame.size.height) / 2;
labelTitle.frame = labelTitleFrame;
labelTitle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// Just add UILabel like UIToolBar's subview 
[self.toolbar addSubview:labelTitle];
[labelTitle release];
labelTitle = nil;

答案 2 :(得分:4)

最简单的方法是将标签放在上方,在它的父视图中,并在那里证明它。

答案 3 :(得分:0)

是的,我们可以将工具栏项居中,只需在工具栏中放置两个灵活空间,如:

UIBarButtonItem *flexibaleSpaceBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

toolbar.items = [NSArray arrayWithObjects:loginButton,flexibaleSpaceBarButton,toolBarLabel,flexibaleSpaceBarButton, nil];

答案 4 :(得分:0)

如果你不使用灵活或固定的空间,你可以修改内部 UIToolbar UIStackView 分配如下。请注意,您应该在视图控制器的 toolbar.centerItemsHorizontally() 方法中调用 viewDidLayoutSubviews()

extension UIView {
    func allSubviews() -> [UIView] {
        var _allSubviews: [UIView] = []
        for subview in self.subviews {
            _allSubviews += subview.allSubviews()
            _allSubviews.append(subview)
        }
        return _allSubviews
    }
}
extension UIToolbar {
    func centerItemsHorizontally() {
        allSubviews().forEach { subview in
            if let stackView = subview as? UIStackView {
                stackView.distribution = .fillEqually
            }
        }
    }
}

结果: enter image description here