, wenn Sie ein UIBarButtonItem
mit einer Breite von (automatischer Breitenberechnung) zu einem UIToolBar
in Storyboard hinzufügen, und Sie können aus es nach Ansicht des Rahmens gedruckt sehen, dass es origin.x Wert ist, ist 12,0. Wenn Sie die Breite auf etwas Bestimmtes ändern (anstelle der automatischen Breitenberechnung) und den Rahmen erneut prüfen, können Sie sehen, dass es sich um ursprung.x handelt. Der Wert ist 20,0.
Da Sie in Ihrem Fall die Breite manuell einstellen müssen, werden wir mit diesem Wert 20.0 arbeiten.
, wenn Sie zwei UIBarButtonItems
zu einem UIToolBar
in Storyboard hinzufügen, und ihre Ansichten Frames ausdrucken können Sie sehen, dass es einen Raum von 10,0 Punkte zwischen ihnen.
mit, dass die Werte im Auge Sie so etwas wie das folgende tun könnte:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let item = UIBarButtonItem(title: "create set", style: .Plain, target: nil, action: nil)
setupToolbarWithItems([item], animated: true)
printToolbarFrames()
}
private func setupToolbarWithItems(items: [UIBarButtonItem], animated: Bool) {
guard let toolbar = navigationController?.toolbar else {
print("there is no toolbar")
return
}
if items.isEmpty {
setToolbarItems(nil, animated: animated)
return
}
// change item widths to specific size for correct calculation
for item in items {
item.width = 44
}
setToolbarItems(items, animated: animated)
// calculate margin and innerItemSpace
let firstView = items.first?.valueForKey("view") as! UIView
let margin = firstView.frame.origin.x
var innerItemSpace = CGFloat(0)
if items.count > 1 {
let secondView = items[1].valueForKey("view") as! UIView
innerItemSpace = secondView.frame.origin.x - (firstView.frame.origin.x + firstView.frame.size.width)
}
// calculate and set correct itemWidth for each item
let toolbarWidth = toolbar.frame.size.width
let availableToolbarSpace = toolbarWidth - 2 * margin - (CGFloat(items.count) - 1) * innerItemSpace
let itemWidth = floor(availableToolbarSpace/CGFloat(items.count))
for item in items {
item.width = itemWidth
}
}
hoffe, es hilft :)
EDIT
hier ist eine weitere Hilfsfunktion aus dem jeweiligen drucken Symbolleistenrahmen nach der Verwendung der setupToolbarWithItems
Methode:
private func printToolbarFrames() {
guard let toolbar = navigationController?.toolbar else {
print("there is no toolbar")
return
}
print("toolbar frame: \(toolbar.frame)")
guard let items = toolbar.items else {
print("there are no items on the toolbar")
return
}
for item in items {
let view = item.valueForKey("view") as! UIView
print("item: \(item.title!), frame: \(view.frame)")
}
}
Sie könnten dem flexiblen Bereich die gleiche Tipp-Aktion hinzufügen. Oder füllen Sie einfach die 'create set'-Zeichenfolge mit gleichen Führungs-/Trainingsbereichen. – thelaws
@thelaws Hinzufügen der gesendeten Aktion zum flexiblen Raum ist eine großartige Idee! als ich es jedoch über das Storyboard implementiert habe, scheint es nicht zu funktionieren. – scientiffic