UIBarButtonItem
内のUIToolbar
のタイトルを調整することは可能ですか?
次のコード行を試しましたが、成功しませんでした。
UIBarButtonItem.appearance().setTitlePositionAdjustment(UIOffset(horizontal: 30, vertical: 30), forBarMetrics: UIBarMetrics.Default)
そしてこれ:
self.setTitlePositionAdjustment(UIOffset(horizontal: 30, vertical: 30), forBarMetrics: UIBarMetrics.Compact)
UIToolBar内のUIBarButtonItem(テキスト!)を垂直方向にオフセットすると、Xcode 7(ベータ6)では機能しないようです。
あなたは正しいです、 ドキュメントによると 、これはそれを行う必要があります:UIBarButtonItem.appearance().setTitlePositionAdjustment
appDelegateでグローバルに:
UIBarButtonItem.appearance().setTitlePositionAdjustment(UIOffset(horizontal: 30, vertical: 30), forBarMetrics: UIBarMetrics.Default)
またはアイテムアウトレット自体でローカルに:
(迅速)
self.myBarItem.setTitlePositionAdjustment(UIOffset(horizontal: 30, vertical: 30), forBarMetrics: UIBarMetrics.Default)
(Obj C)
[self.myBarItem setTitlePositionAdjustment:UIOffsetMake(30, 30) forBarMetrics: UIBarMetricsDefault];
これは外観のバグですか?
テキストのbaselineOffset
を変更します。
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.someFunction))
let attributes = [NSAttributedString.Key.baselineOffset: NSNumber(value: -3)]
doneButton.setTitleTextAttributes(attributes, for: .normal)
負のbaselineOffset
はタイトルテキストを下にシフトし、正の値はそれを上にシフトします。 0がデフォルト値です。
私はこれをiOS11でテストしました。
私もこれに不満を感じていたので、UIBarButtonItemをサブクラス化して期待どおりに機能させました。 this の答えから私はこれを思いついた:
@interface TitleAdjustingBarButtonItem(){
UIView* _parentView;
UIButton* _button;
}
@end
@implementation TitleAdjustingBarButtonItem
-(id) initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action{
_button = [[UIButton alloc] init];
[_button setTitle:title forState:UIControlStateNormal];
[_button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[_button sizeToFit];
_parentView = [[UIView alloc] initWithFrame:_button.bounds];
[_parentView addSubview:_button];
return [super initWithCustomView:_parentView];
}
#pragma mark - property setters -
-(void) setTitlePositionAdjustment:(UIOffset)adjustment forBarMetrics:(UIBarMetrics)barMetrics{
[_button sizeToFit];
_parentView.bounds = CGRectMake(0.0, 0.0, _button.bounds.size.width - (adjustment.horizontal * 2.0), _button.bounds.size.height - (adjustment.vertical * 2.0));
}
確かに、それはさまざまなバーメトリックを考慮していませんが、デフォルトのメトリックについては、これがかなりうまく機能するようになっています。
回避策を見つけました。ナビゲーションバーの戻るボタンのタイトルの位置を変更しようとしていました。タイトルは左下に固定されているようです。そこで、ナビゲーションバー全体の位置を変更し、それに応じてサイズを調整して、ビューで同じサイズに見えるようにしました。
let xDisplacement: CGFloat = -25 // Adjust horizontal position
let yDisplacement: CGFloat = 9 // Adjust vertical position
let h = (self.viewIfLoaded?.frame.size.height)!/12 //Set your height in reference to the size of the view
let w = (self.viewIfLoaded?.frame.size.height)!//Set your width in reference to the size of the view
//Change placement adjusting size for change.
self.navigationController?.navigationBar.frame = CGRect(x: xDisplacement, y: yDisplacement, width: w-xDisplacement, height: h-yDisplacement)
私の場合、背景は透明なので、調整しても実際には違いはありません。また、タイトルを左に移動しようとしていました。調整解除が役立つのはそれだけだと思います。
とにかく、単なる回避策ですが、それが役立つことを願っています。
ここに完全な初心者、フィードバックをいただければ幸いです。
このための提案:UIButton
内でUIBarButtonItem
を使用します。
両側に2つの背の高いボタン(スクリーンショットの[上へ]ボタンと[下へ]ボタン)があるツールバーがあり、ユーザーがアクションを開始すると、ツールバーにテキストのみの2つのボタンが表示されます。最初にそれらをUIBarButtonItem
オブジェクトとしてツールバーに配置したとき、それらはツールバーの非常に低い位置にあり、私が試したものでは、それらを高い位置に配置することはできませんでした。それらの位置は、デバイスの下部にあるバーがそれらをブロックしているため、ユーザーがiPadProデバイスでそれらを押すのを困難にしました。
UIButton
をツールバーにドラッグすると、IBはそれらをビューとしてUIBarButtonItem内に自動的に配置し、ツールバーの垂直方向の中央に配置されることがわかりました。その後、通常どおりにUIButton
のコンテンツインセットを調整することができ、変更は適切に反映されました。 (私はそれらを垂直方向の中央に配置することだけを考えていたので、UIButtons
を使用するだけでうまくいきました)。フックするIBActionはすべてUIButtonにフックする必要があることに注意してください。
XCode10.1とSwift 4でこれを行いました。