Navigation左右文字间距(修改rightBarButtonItem的间距)

- ( void )initNavigateView{
    UIColor *textColorButtonSelected = EF_TextColor_TextColorButtonSelected ;
    UIButton * btn= [[ UIButton alloc ] initWithFrame : CGRectMake (0, 0, 66, 44)];
    [btn addTarget : self action : @selector (rightAction) forControlEvents : UIControlEventTouchUpInside ];
    [btn
setTitle : @"保存" forState : UIControlStateNormal ];
    [btn
setTitleColor :textColorButtonSelected forState : UIControlStateSelected ];
   
UIBarButtonItem *barBtnItem = [[ UIBarButtonItem alloc ] initWithCustomView :btn];
   
self . navigationItem . rightBarButtonItem = barBtnItem;
}

我们发现,在设置navigationItem的leftBarButtonItem或rightBarButtonItem时,用CustomView初始化UIBarButtonItem,不论怎么设置CustomView的frame,添加到导航条上之后总是和屏幕边界有一定的间距(5pix),如何自由调整这个间距呢?

        方法一:

        考虑到CustomView一般为UIButton,如果该按钮上面是一个图片,仅为了显示效果,我们可以通过setImage: forState:方法设置button的背景图片(注意这里不是setBackgroundImage: forState:),然后通过setImageEdgeInsets:方法设置按钮图片和按钮各个边界的距离即可。按钮为文字的情况类似,对应的方法是setTitle: forState:和setTitleEdgeInsets:
    [ _rightButton setTitleEdgeInsets : UIEdgeInsetsMake (0,40, 0 , 0)];
        方法二:
        初始化一个用于控制间距的UIBarButtonItem实例negativeSpacer,并设置negativeSpacer的width属性的值,设为-5的时候,正好可以使按钮与屏幕边界值为0,以rightBarButtonItem情况为例 
  1. UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];    
    //
    设置frame只能控制按钮的大小   
  2. btn.frame= CGRectMake(004044);    
  3. [btn addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];    
  4. UIBarButtonItem *btn_right = [[UIBarButtonItem alloc] initWithCustomView:btn];    
  5. UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]     
  6.                                    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace     
  7.                                    target:nil action:nil];    
  8. // width为负数时,相当于btn向右移动width数值个像素,由于按钮本身和边界间距为5pix,所以width设为-5时,间距正好调整为0;width为正数时,正好相反,相当于往左移动width数值个像素   
  9. negativeSpacer.width = -5;     
  10. self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:negativeSpacer, btn_right, nil nil];  // //    //negativeSpacer 和 btn_right 的添加顺序不能变.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使 BottomNavigationView 的底部文字全部显示,可以使用以下方法: 1. 使用自定义布局:首先,创建一个自定义的布局件,例如 `custom_bottom_navigation.xml`,在该布局件中使用 TextView 来显示底部文字。设置 TextView 的属性,例如 `android:singleLine="true"` 和 `android:ellipsize="end"`,以确保本不会换行,并且超出范围时以省略号显示。然后,将此自定义布局件设置为 BottomNavigationView 的 item 布局。 示例代码如下所示: ```xml <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" app:itemLayout="@layout/custom_bottom_navigation" app:menu="@menu/bottom_navigation_menu" /> ``` 其中,`custom_bottom_navigation.xml` 件的示例代码如下所示: ```xml <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/bottom_navigation_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="end" android:textSize="12sp" /> ``` 2. 缩小字体大小:如果底部文字较长,可以尝试通过减小字体大小来适应显示。可以使用 `app:itemTextAppearanceActive` 和 `app:itemTextAppearanceInactive` 属性来设置活动和非活动状态下的字体大小。 示例代码如下所示: ```xml <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" app:itemTextAppearanceActive="@style/BottomNavigationActiveText" app:itemTextAppearanceInactive="@style/BottomNavigationInactiveText" app:menu="@menu/bottom_navigation_menu" /> ``` 然后,在 `styles.xml` 件中定义字体样式: ```xml <style name="BottomNavigationActiveText"> <item name="android:textSize">12sp</item> </style> <style name="BottomNavigationInactiveText"> <item name="android:textSize">12sp</item> </style> ``` 通过调整字体大小,可以使底部文字适应 BottomNavigationView 的宽度,并全部显示出来。 这些方法可以帮助你在 BottomNavigationView 中显示全部底部文字。根据你的需求,选择适合的方法来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值