web-dev-qa-db-ja.com

UIToolbar内のUIBarButtonItemタイトルの垂直位置を調整します

UIBarButtonItem内のUIToolbarのタイトルを調整することは可能ですか?

次のコード行を試しましたが、成功しませんでした。

UIBarButtonItem.appearance().setTitlePositionAdjustment(UIOffset(horizontal: 30, vertical: 30), forBarMetrics: UIBarMetrics.Default)

そしてこれ:

self.setTitlePositionAdjustment(UIOffset(horizontal: 30, vertical: 30), forBarMetrics: UIBarMetrics.Compact)
18
Antoine

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];

これは外観のバグですか?

6
wider-spider

テキストの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でテストしました。

3
Cloud9999Strife

私もこれに不満を感じていたので、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));
}

確かに、それはさまざまなバーメトリックを考慮していませんが、デフォルトのメトリックについては、これがかなりうまく機能するようになっています。

1
LOP_Luke

回避策を見つけました。ナビゲーションバーの戻るボタンのタイトルの位置を変更しようとしていました。タイトルは左下に固定されているようです。そこで、ナビゲーションバー全体の位置を変更し、それに応じてサイズを調整して、ビューで同じサイズに見えるようにしました。

    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)

私の場合、背景は透明なので、調整しても実際には違いはありません。また、タイトルを左に移動しようとしていました。調整解除が役立つのはそれだけだと思います。

とにかく、単なる回避策ですが、それが役立つことを願っています。

ここに完全な初心者、フィードバックをいただければ幸いです。

0
Alejandro Camus

このための提案:UIButton内でUIBarButtonItemを使用します。

両側に2つの背の高いボタン(スクリーンショットの[上へ]ボタンと[下へ]ボタン)があるツールバーがあり、ユーザーがアクションを開始すると、ツールバーにテキストのみの2つのボタンが表示されます。最初にそれらをUIBarButtonItemオブジェクトとしてツールバーに配置したとき、それらはツールバーの非常に低い位置にあり、私が試したものでは、それらを高い位置に配置することはできませんでした。それらの位置は、デバイスの下部にあるバーがそれらをブロックしているため、ユーザーがiPadProデバイスでそれらを押すのを困難にしました。

UIButtonをツールバーにドラッグすると、IBはそれらをビューとしてUIBarButtonItem内に自動的に配置し、ツールバーの垂直方向の中央に配置されることがわかりました。その後、通常どおりにUIButtonのコンテンツインセットを調整することができ、変更は適切に反映されました。 (私はそれらを垂直方向の中央に配置することだけを考えていたので、UIButtonsを使用するだけでうまくいきました)。フックするIBActionはすべてUIButtonにフックする必要があることに注意してください。

XCode10.1とSwift 4でこれを行いました。

Storyboard outline view

0
N.W