UIToolbarにラベルを付けています(このヒントによると、UIToolbarへのUILabelの追加)。
ただし、ツールバーの左側にはボタンがあるため、柔軟なスペースを使用すると、ラベルが中央から外れます。これが、私が望む場所です。どういうわけか、このツールバーアイテムを中央に配置して、ツールバーの中央に配置したままにすることはできますか?
(ボタンとダミーの固定スペース、サイコロなしのバランスをとってみました。)
ありがとう!
UIToolbarにラベルを付けています(このヒントによると、UIToolbarへのUILabelの追加)。
ただし、ツールバーの左側にはボタンがあるため、柔軟なスペースを使用すると、ラベルが中央から外れます。これが、私が望む場所です。どういうわけか、このツールバーアイテムを中央に配置して、ツールバーの中央に配置したままにすることはできますか?
(ボタンとダミーの固定スペース、サイコロなしのバランスをとってみました。)
ありがとう!
中央のアイテムの左右に、行ったように柔軟なスペースアイテムを追加します。次に、最後に固定スペースアイテムを追加し、幅を左ボタンの幅(約28ピクセル)に設定します。
UIBarButtonItem *fixedItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:NULL] autorelease];
fixedItem.width = 28;
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つの柔軟なスペースを配置するだけです。
UIBarButtonItem *flexibaleSpaceBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
toolbar.items = [NSArray arrayWithObjects:loginButton,flexibaleSpaceBarButton,toolBarLabel,flexibaleSpaceBarButton, nil];
フレキシブルスペースまたは固定スペースを使用しない場合は、以下のように内部UIToolbarUIStackViewディストリビューションを変更できます。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
}
}
}
}