Ios 如何将两个按钮向左对齐&;UIToolbar的右边框

Ios 如何将两个按钮向左对齐&;UIToolbar的右边框,ios,objective-c,swift,Ios,Objective C,Swift,我一直在尝试Cocoa和Swift(我是一个noob),但遇到了一个似乎无法解决的问题: 假设我创建了一个UIToolbar,并在其中添加了两个按钮:“取消”和“接受”。我想将“取消”按钮与UIToolbar的左边缘对齐(当然,默认情况下可以工作),将“接受”按钮与右边缘对齐。是否有一些简单的方法来实现正确的对齐?这就是我目前拥有的: let toolbar = UIToolbar(frame: CGRectMake(0, 0, w, 35)) toolbar.backgroundColor =

我一直在尝试Cocoa和Swift(我是一个noob),但遇到了一个似乎无法解决的问题:

假设我创建了一个UIToolbar,并在其中添加了两个按钮:“取消”和“接受”。我想将“取消”按钮与UIToolbar的左边缘对齐(当然,默认情况下可以工作),将“接受”按钮与右边缘对齐。是否有一些简单的方法来实现正确的对齐?这就是我目前拥有的:

let toolbar = UIToolbar(frame: CGRectMake(0, 0, w, 35))
toolbar.backgroundColor = UIColor(red: 0.75, green: 0.75, blue: 0.75, alpha: 0.95)
let acceptButton = UIBarButtonItem(title: "Accept", style: UIBarButtonItemStyle.Done, target: self, action: "buttonPressed:")
let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "buttonPressed:")
let space = UIBarButtonItem(customView: UIView(frame: CGRectMake(0, 0, 50, 10))) // <- MEH! this is not dynamic!
toolbar.items = [acceptButton, space, cancelButton]
view.addSubview(toolbar)
这也不起作用,似乎没有直接子视图子视图是UIBarButtonItem(因此它返回的宽度为375)

设置标签是不可行的…:

let cancelButton.tag = 1
let acceptButton.tag = 0
let acceptButtonFrame = toolbar.viewWithTag(0)!.frame
let cancelButtonFrame = toolbar.viewWithTag(1)!.frame
println(acceptButtonFrame.width)
println(cancelButtonFrame.width)
收益率:

375.0

致命错误:在展开可选值时意外发现nil

(lldb)


有什么办法吗?:-/感谢您的帮助。

是的,只需在两者之间添加一个灵活的空间即可

let toolbar = UIToolbar(frame: CGRectMake(0, 0, w, 35))
toolbar.backgroundColor = UIColor(red: 0.75, green: 0.75, blue: 0.75, alpha: 0.95)
let acceptButton = UIBarButtonItem(title: "Accept", style: UIBarButtonItemStyle.Done, target: self, action: "buttonPressed:")
let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "buttonPressed:")
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil);
toolbar.items = [acceptButton, flexibleSpace, cancelButton]
不确定这是否是正确的语法,但该类仍然是。唯一的区别是系统项是一个
uiBarButtonSystemitem.FlexibleSpace

评论:

在另一个答案中,这是一个建议:

UIView *view= (UIView *)[self.toolbar.subviews objectAtIndex:0]; // 0 for the first item
UIView *view= (UIView *)[self.toolbar.subviews objectAtIndex:0]; // 0 for the first item
这也不起作用,似乎没有直接子视图的子视图 UIBarButtonItem(因此它返回的宽度为375)


不起作用的原因是因为
[self.toolbar.subviews objectAtIndex:0]
是Objective-C代码,而不是Swift代码。

您必须使用FlexibleSpace按钮系统作为分隔符

let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace,
              target: nil,
              action: nil);
这将自动缩放


干杯,

如何使用代码在它们之间添加灵活的空格?是哪一班?或者我该如何使按钮灵活?就是这样!非常感谢。对评论的评论:我当然知道,我把它翻译成了Swift。:)显示了工具栏的4个子项,它们都不工作。所有的答案都是错误的,都被追溯到了“是不是维吾尔布顿主义”(或者是幕后正在进行某种转换?),并且宽度都是错误的。谢谢,我想你的答案比公认的答案得到“更正”要快,我至少会投你的一票。呵呵。。谢谢,重要的是您已经修复了代码:)