自定义nav返回按钮后,自带的右滑返回功能失效解决方法

在自定义了UINavigationController的返回按钮后,原生的右滑返回功能可能会失效。通过在自定义的navigationController中加入特定方法,可以解决这一问题。主要代码实现关键在于重新启用滑动返回功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度了一下,用自定义的navigationController,加上以下的方法,可以解决,红色的是主要代码,不知道大牛们有其它的方法bu。

在MainNavigationViewController写:
@interface MainNavigationViewController () <UINavigationControllerDelegate, UIGestureRecognizerDelegate>

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.interactivePopGestureRecognizer.delegate = self;
    self.delegate = self;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.viewControllers.count > 0) { // 这时push进来的控制器,不是第一个子控制器(不是根控制器)
        // 设置导航栏上面的内容
        // 设置左边返回按钮
        viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithTarget:self action:@selector(back) image:@"arrow_left_w" highImage:@"arrow_left_w"];
    }

    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.enabled = NO;
    }

    [super pushViewController:viewController animated:animated];
}

#pragma mark - UIGestureRecognizerDelegate 在根视图时不响应interactivePopGestureRecognizer手势
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if (self.navigationController.viewControllers.count == 1) {
        return NO;
    } else {
        return YES;
    }
}

#pragma mark - navigationDelegate 实现此代理方法也是为防止滑动返回时界面卡死
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    //开启滑动手势
    if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
}

### 实现微信小程序自定义导航栏返回按钮 为了实现微信小程序中的自定义头部返回按钮功能,可以采用 `navigationStyle` 设置为 `"custom"` 的方式来隐藏默认的导航栏并创建自己的导航栏组件[^1]。 通过调用 API 函数 `wx.getMenuButtonBoundingClientRect()` 获取胶囊按钮的位置信息以便更好地定位自定义控件,并利用 `wx.navigateBack()` 方法处理点击事件以完成页面回退操作[^4]。 下面是一个简单的例子展示如何构建带有返回箭头图标的自定义顶部导航栏: ```javascript // app.json 中设置全局样式 { "pages": [ "pages/index/index", ... ], "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle": "black", "navigationStyle": "custom" } } ``` ```html <!-- pages/index.wxml --> <view class="nav-bar"> <!-- 左侧返回图标 --> <image src="/images/back.png" bindtap="handleBackClick"></image> <!-- 中间标题 --> <text>页面名称</text> <!-- 边可放置其他元素 如菜单等 --> </view> ``` ```css /* pages/index.wxss */ .nav-bar { position: fixed; top: var(--status-bar-height); width: 100%; height: 90rpx; /* 调整到合适高度 */ background-color: white; display: flex; align-items: center; justify-content: space-between; padding-left: 30rpx; box-shadow: 0 2px 8px rgba(0, 0, 0, .1); } .nav-bar image { width: 40rpx; height: 40rpx; } ``` ```javascript // pages/index.js Page({ handleBackClick() { wx.navigateBack(); }, }) ``` 此代码片段展示了如何在微信小程序中创建一个具有基本样式的自定义导航栏,并实现了当用户点击左侧图片时触发页面返回逻辑。需要注意的是,在实际开发过程中可能还需要考虑不同机型的状态栏高度差异等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值