Вы должны использовать «разделители»
(ДА, это ObjC, я постараюсь придумать Свифт решения, но единственное изменение, которое вы будете делать это, чтобы создать UIBarButtonItems с помощью этого "UIBarButtonSystemItemFlexibleSpace"
Например, это:
_invitePlaceHolderForExampleBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"some_image"] style:UIBarButtonItemStylePlain target:self action:@selector(doSomething)];
_homePlaceHolderForExampleBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"some_image"] style:UIBarButtonItemStylePlain target:self action:@selector(doSomethingMore)];
[[self navigationItem] setRightBarButtonItems:[[NSArray alloc] initWithObjects:_invitePlaceHolderForExampleBarButtonItem, _homePlaceHolderForExampleBarButtonItem, nil]];
Производит это:
Ну, что было очевидно, верно?
Теперь посмотрим на это с 1 SPACER:
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
_invitePlaceHolderForExampleBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"some_image"] style:UIBarButtonItemStylePlain target:self action:@selector(doSomething)];
_homePlaceHolderForExampleBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"some_image"] style:UIBarButtonItemStylePlain target:self action:@selector(doSomethingMore)];
[[self navigationItem] setRightBarButtonItems:[[NSArray alloc] initWithObjects:_invitePlaceHolderForExampleBarButtonItem, spacer,_homePlaceHolderForExampleBarButtonItem, nil]];
производит это:
И он производит этот ХИТ площадь:
Вы заметите, очень-очень тонкие линии, показывают хит площадь в UIBarButtonItems и они так же, как они должны быть
Теперь рассмотрим это с 3 Распорки:
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
_invitePlaceHolderForExampleBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"some_image"] style:UIBarButtonItemStylePlain target:self action:@selector(doSomething)];
_homePlaceHolderForExampleBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"some_image"] style:UIBarButtonItemStylePlain target:self action:@selector(doSomethingMore)];
[[self navigationItem] setRightBarButtonItems:[[NSArray alloc] initWithObjects:spacer, _invitePlaceHolderForExampleBarButtonItem, spacer,_homePlaceHolderForExampleBarButtonItem, spacer, nil]];
Производит это:
И он производит этот ХИТ область:
Просто используйте различные проставки и что нет, и прекратить вмешательство в попытке заставить UIView в навигационной панели. Почти все, что похоже на то, что Apple не может сделать, это то, что Apple уже делает. Это проблема документации, и Apple могла бы лучше понять, как разработчики, а не разработчики пытаются взломать решение, но я отвлекся, это будет работать, просто используйте то, что у вас уже есть перед вами.
Это работает:
import UIKit
class DetailViewController: UIViewController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.title = "Example"
var img = UIImage(named: "thw")
var space1:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)
space1.width = 50
var b = UIBarButtonItem(image: img, style: .Plain, target: self, action: "sayHello")
var a = UIBarButtonItem(image: img, style: .Plain, target: self, action: "sayHello")
self.navigationItem.setRightBarButtonItems([b, space1, a], animated: true)
}
func sayHello() {
println("got here")
}
override func viewDidLoad() {
super.viewDidLoad()
self.view?.backgroundColor = UIColor .redColor()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
производит этот выход, без подклассов:
Вы собираетесь придется возиться с прокладками, чтобы сделать эту работу, но это работает. У меня больше нет ответов для вас, вам просто нужно будет настроить его здесь и там, но из примера, который я вам показывал раньше, вы используете разделители с фиксированной шириной, я не использовал фиксированную ширину, даже когда я просто определил те, что были в быстром примере, как гибкие, это имеет значение? Я не знаю, но он работал, не меняя названия.
Я играл с 'UIBarButtonSystemItemFlexibleSpace', но проблема в том, что [название навигационной панели не исправлено] (http://postimg.org/image/iuw54uufh/) и попадает влево, в то время как мой 3 кнопки распределяются равномерно по оставшемуся расстоянию –
Да, но мой заголовок остается фиксированным, я могу показать, что это работает, но решения очень длинные, он не требует ничего большего, чем подклассификация подкласса UIViewController, пусть я знаю, если это то, что вы хотите, потому что это решение довольно интенсивно, но поэтому мой заголовок не двигается – Loxx
, что было бы здорово. –