Neil_HL
Neil_HL
  • 发布:2018-12-17 15:49
  • 更新:2024-07-15 10:10
  • 阅读:88981

uni-app在App端动态修改原生导航栏

分类:uni-app

在App端可以通过得到webview对象,通过当前 webview 对象的 setTitleNViewButtonBadge, setTitleNViewButtonStyle, setTitleNViewSearchInputFocus,setTitleNViewSearchInputText 分别对 TitleNView 上的按钮角标,按钮,输入框等组件的样式进行修改。

对于 searchInput 还支持: 通过 webview的getStyle(),得到一个json对象,然后用json的.来获取titleNView,拿到的还是json对象,然后修改json对象,再用webview的setstyle方法把这个json对象赋值进去。

具体实现如下:

// #ifdef APP-PLUS  
var webView = this.$mp.page.$getAppWebview();  

// 修改buttons  
// index: 按钮索引, style {WebviewTitleNViewButtonStyles }  
webView.setTitleNViewButtonStyle(0, {  
    text: 'hello',  
});  

// 修改按钮上的角标  
// index: 按钮索引, text: 角标文本内容  
webView.setTitleNViewButtonBadge({  
    index: 0,  
    text: 10,  
});  

// 设置 searchInput的 focus  
// focus: true | false  
webView.setTitleNViewSearchInputFocus(true)  

// 设置 searchInput的 text  
webView.setTitleNViewSearchInputText(text)  

// searchInput 通过 webview 的 setStyle 方法进行更新  
var tn = currentWebview.getStyle().titleNView;  
if (tn.buttons) {    
uni.getSystemInfo({    
    success:function(res){    
        if (res.platform=="ios") { // 这里在HBuilderX 1.9.9版本有个bug,searchInput的I变小写了 ,临时绕过下。更高版本会修复此bug    
            tn.searchinput.placeholder = 'test';    
            currentWebview.setStyle({    
                titleNView: tn    
            });    
        } else{    
            tn.searchInput.placeholder = 'test'; //这里有个已知bug,HBuilderX 1.9.9上,当searchInput位于首页时,动态设置placehold会导致buttons的点击事件消失。更高版本会修复此bug    
            currentWebview.setStyle({    
                titleNView: tn    
            });    
        }    
    }    
})    
}    

// #endif

参考这个原理,可以任意修改titleNView的所有内容,titleNView的style内容详见:
https://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewTitleNViewStyles

button的相关属性参考:http://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewTitleNViewButtonStyles

searchInput的相关属性参考:https://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewTitleNViewSearchInputStyles

附件为测试buttons的demo,可下载体验。

22 关注 分享
Trust 以何为家 mmt 1***@qq.com 1***@qq.com b***@hotmail.com 今天回复我了吗 a***@163.com ilijiayin 5***@qq.com 5***@qq.com lhyh 睡不醒哎 王利东 2***@qq.com rysnone 2***@qq.com m***@foxmail.com 1***@qq.com chihiro_yy 2***@qq.com 套马杆的套子

要回复文章请先登录注册

c***@163.com

c***@163.com

let currentWebview = page.$getAppWebview();
let titleObj = currentWebview.getStyle().titleNView;
titleObj.buttons[0].text = ‘动态234’
currentWebview.setStyle({
titleNView: titleObj,
width:"100px"
});

这样子在手机端app上切换页面会有卡顿 请问怎么操作才能不卡顿啊 有时候返回上一页还会直接退出应用
2024-07-15 10:10
神仙姐姐

神仙姐姐

回复 1***@139.com :
大佬,解决了吗,我现在也有这个需求
2024-06-17 17:02
1***@139.com

1***@139.com

可以通过更改titleNView来实现动态显示或隐藏searchinput吗?
2023-11-23 16:57
2***@qq.com

2***@qq.com

mark
2023-09-22 14:18
毛毛你好

毛毛你好

回复 猜码 :
同样遇到了这个问题
2023-08-31 10:18
bLanKL

bLanKL

onReady() {
// #ifdef APP-PLUS
var webView = this.$mp.page.$getAppWebview();
// console.log(webView.setTitleNViewSearchInputText)
webView.setTitleNViewSearchInputText(this.keyword)
// #endif

// #ifdef H5
var searchInputDom = document.querySelector(".uni-input-input[type=search]");
var evt = new UIEvent('input', {
bubbles: false,
cancelable: false
});
searchInputDom.value = this.keyword;
searchInputDom.dispatchEvent(evt);
// #endif
},
之前有位大佬给出的回答,但是经过实践需要在onReady里,才能在H5页面生效,onLoad里是不行的!!!
2023-08-21 21:16
猜码

猜码

//这里有个已知bug,HBuilderX 1.9.9上,当searchInput位于首页时,动态设置placehold会导致buttons的点击事件消失。更高版本会修复此bug

这个bug还没修复呀,已经是HBuilderX 3.8.4了
2023-06-25 15:27
一碗粥

一碗粥

回复 x***@163.com :
我也是,用的plus.webview.getDisplayWebview()[0].setTitleNViewSearchInputText(text)解决
2023-01-08 15:19
x***@163.com

x***@163.com

// #ifdef APP-PLUS
var webView = this.$mp.page.$getAppWebview();
// 设置 searchInput的 text
webView.setTitleNViewSearchInputText(e.keyword);
// #endif
提示:TypeError: Cannot read property 'page' of undefined是哪里的问题
2022-11-24 17:35
[已删除]

[已删除]

nvue怎么监听tags里面的input呀,输入完成事件
2022-06-17 18:17