我在UIToolbar上放了一个标签(按照这个提示:Adding a UILabel to a UIToolbar)。
但是工具栏的左侧有一个按钮,因此灵活的空间会将标签从中心抛出,这就是我想要的位置。我可以以某种方式将此工具栏项目居中,以使其保持在工具栏的中心位置吗?
(已经尝试平衡按钮与虚拟固定空间,没有骰子。)
谢谢!
答案 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
}
}
}
}