• 换了其它的方式实现,通过window.screen.height可以获取屏幕的高度,而不受那个当行bar的影响。
     换了其它的方式实现,通过window.screen.height可以获取屏幕的高度,而不受那个当行bar的影响。 

    document.cilentHeight 则是受bar的影响的

    function get_view_port_width() {
        return window.screen.width;
    }
    function get_view_port_height() {
        return window.screen.height;
    }


    另外IOS与安卓不一样所以要做一个判断:

    if(window.orientation == 0 || window.orientation == 180){
        p_w = get_view_port_width() + 'px';
        p_h = get_view_port_height() + 'px';
    }else if(window.orientation == 90 || window.orientation == -90) {
        if (android) {
            p_w = get_view_port_width() + 'px';
            p_h = get_view_port_height() + 'px';
        } else if (iphoneos || ipad) {
            p_w = get_view_port_height() + 'px';
            p_h = get_view_port_width() + 'px';
        }
    }

    展开全文
  • 首先呢弄一个ScrollView并并重写方法 onScrollChanged 监听滑动的状态,然后根据自己需求改变其状态。 其次,看代码: public class ObservableScrollView extends ScrollView { //底部图片 private View ...

    说白了没啥高深的东西简单的一笔。。。。

    首先呢弄一个ScrollView并并重写方法 onScrollChanged 监听滑动的状态,然后根据自己需求改变其状态。

    其次,看代码:

    public class ObservableScrollView extends ScrollView {
        //底部图片
        private View viewHeigh;
        private View viewTopBar;
        private View decor;
        float f = -1;
        int height;
    
        private ScrollViewListener scrollViewListener = null;
    
    
        public ObservableScrollView(Context context) {
            super(context);
        }
    
    
        public ObservableScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
    
        public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
    //        decor = this.getWindow().getDecorView();
        }
    
    
        public void setScrollViewListener(ScrollViewListener listener) {
            this.scrollViewListener = listener;
        }
    
    
        @Override
        protected void onScrollChanged(int x, int y, int oldx, int oldy) {
            super.onScrollChanged(x, y, oldx, oldy);
            setalph(y);
    //        if(scrollViewListener != null) {
    //            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
    //        }
        }
    
        private void setalph(int y){
            if (height == 0) {
                height = viewHeigh.getMeasuredHeight()-viewTopBar.getMeasuredHeight();
            } else if (y <= height*2/3) {
                setTopBar(0);
            } else if (y <= height) {
                if (y < 0) {
                    y = 0;
                }
                f = (float) (y-height*2/3) / (float) (height/3);
                if(f<0.2){
                    f = 0;
                }
                if (f > 1) {
                    f = 1;
                }
                setTopBar(f);
            }else if(f<1){
                f = 1;
                setTopBar(f);
            }
        }
    
        private void setTopBar(float f) {
            viewTopBar.getBackground().setAlpha((int) (f * 255));
            // 通知标题栏刷新显示
            viewTopBar.invalidate();
            if (decor == null) {
                return;
            }
            //设置状态栏字体颜色
            if (f > 0.5) {
                decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            } else {
                decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            }
        }
    
        public void setViewBase(View viewHeigh,View viewTopBar,View window){
            this.viewHeigh = viewHeigh;
            this.viewTopBar = viewTopBar;
            this.decor = window;
        }
    
    
        public interface ScrollViewListener {
            void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);
        }
    }
    

    Activity代码:

    public class FillScreenActivity extends BaseTwoActivity {
        ObservableScrollView scrollView;
        LinearLayout topBar;
        ImageView view;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_myscrollview);
            innitview();
        }
    
        private void innitview() {
            scrollView = findViewById(R.id.myscrollview);
            topBar = findViewById(R.id.tipbar_linea);
            view = findViewById(R.id.toolbar_image);
            topBar.getBackground().setAlpha(0);
            topBar.setPadding(0,getStatusBarHeigh(),0,0);
            scrollView.setViewBase(view,topBar,getWindow().getDecorView());
        }
    
    
    }
    public class BaseTwoActivity extends AppCompatActivity {
        private static String TAG = "BaseActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);//| Window.FEATURE_SWIPE_TO_DISMISS
            setStatusBarTranslucent();
            //一个创建、一个销毁时 exitAnim:预销毁的activity的动画
        }
    
    
    
    /**
         * 设置透明状态栏
         *
         */
        private void setStatusBarTranslucent() {
            /**
             * 设置状态栏透明后: {windowIsTranslucent=(Manifest activity Theme中
             * android:windowIsTranslucent=true/false)}
             * 1:windowIsTranslucent对其不能产生任何影响 2:windowIsTranslucent
             * 可以解决弹出键盘时暂时出现的黑屏问题 3:xml中 fitsSystemWindows 能产生效果(状态栏空出自然色)
             */
         
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    
                Window window = getWindow();
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.TRANSPARENT);
                window.setNavigationBarColor(Color.TRANSPARENT);
    
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                setTranslucentStatus(true);
                // 透明状态栏
                getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
                // // 透明导航栏
                // getWindow().addFlags(
                // WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
                // 让虚拟导航栏一直不显示
                // Window window = getWindow();
                // WindowManager.LayoutParams params = window.getAttributes();
                // params.systemUiVisibility =
                // View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_IMMERSIVE;
                // window.setAttributes(params);
            }
    
        }
    
     /**
         * 获取状态栏高度
         *
         * @return
         */
        public int getStatusBarHeigh() {
            /**
             * 获取状态栏高度——方法1
             * */
            int statusBarHeight1 = -1;
            // 获取status_bar_height资源的ID
            int resourceId = getResources().getIdentifier("status_bar_height",
                    "dimen", "android");
            if (resourceId > 0) {
                // 根据资源ID获取响应的尺寸值
                statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);
            }
    
            if (statusBarHeight1 != -1) {
                return statusBarHeight1;
            } else {
                /**
                 * 获取状态栏高度——方法3 应用区的顶端位置即状态栏的高度 *注意*该方法不能在初始化的时候用
                 * */
                Rect rectangle = new Rect();
                getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);
    
                return rectangle.top;
            }
    
        }
    
    
    }

    大功告成。

    展开全文
  • 通过window对象来得到窗口相关的内外款高度信息,如下:outerHeight属性设置或返回一个窗口的外部高度,包括所有界面元素(如工具/滚动条)。outerWidth属性设置或返回窗口的外部宽度,包括所有的界面元素(如工具...

    通过window对象来得到窗口相关的内外款高度信息,如下:

    outerHeight属性设置或返回一个窗口的外部高度,包括所有界面元素(如工具栏/滚动条)。
    outerWidth属性设置或返回窗口的外部宽度,包括所有的界面元素(如工具栏/滚动)。
    innerheight 返回窗口的文档显示区的高度。
    innerwidth 返回窗口的文档显示区的宽度。

    在浏览器兼容方面:
    所有主流浏览器都支持 outerWidth 和 outerHeight 属性。
    注意:IE 8 及更早 IE 版本不支持该属性。
    所有主流浏览器都支持 innerWidth 和 innerHeight 属性。
    注意:IE 8 及更早 IE版本不支持这两个属性。

    示例(我笔记本分辨率1366x768,浏览器全屏显示,测试):
    document.write("outerWidth: " + window.outerWidth + " outerHeight: " + window.outerHeight); // 显示:outerWidth: 1366 outerHeight: 768
    document.write("innerWidth: " + window.innerWidth + " innerHeight: " + window.innerHeight); // 显示:innerWidth: 1366 innerHeight: 705

    转载于:https://www.cnblogs.com/snowhite/p/9850296.html

    展开全文
  • 页面配置:是指顶部状态栏的标题,标题颜色,背景颜色。如下图所示: 该标题为内容为:小程序、标题颜色为:黑色、背景颜色为:白色 配置 对页面配置,要用到组件:“window”。 (1)如果小程序有多个页面,想把每...

    摘要 更改顶部导航栏,通常是指更改顶部状态栏的标题内容、标题颜色以及背景颜色,如下图所示:
    在这里插入图片描述
    上图中小程序的顶部导航栏的标题内容:小程序;标题颜色:黑色;背景颜色:白色

    配置

    更改顶部导航栏,要用到组件:“window”。
    (1)如果小程序有多个页面,想把每个页面的顶部导航栏都设置为一样,则在app.json里面设置 “window” 里面的内容
    (2)如果想要不同页面显示不同的顶部导航栏的效果,则需要在每个页面的.json文件里设置"window"

    参数

    组件:“window”下有多个参数,以下列出常用的几个参数,如需详细了解,可参考小程序开发指南之“window”

    navigationBarBackgroundColor:定义导航栏的背景颜色,支持16进制颜色格式,如#000000(白色);

    navigationBarTitleText:设置导航栏的标题内容;

    navigationBarTextStyle:设置导航栏标题文字颜色,只支持‘black’或‘white’;

    代码

    这里更改顶部导航栏的标题、标题颜色和背景颜色;这里在app.json里更改“window”的内容

    "window": {
        "navigationBarBackgroundColor": "#1296db",
        "navigationBarTitleText": "UVC",
        "navigationBarTextStyle": "white"
        }
    

    效果

    在这里插入图片描述
    这里更改成:标题:UVC、标题颜色为:白色、背景颜色为:浅蓝色

    展开全文
  • 微信小程序的开发中,经常需要在不同的地方使用一些相同的组件,这些组件的样式,数据,以及点击事件都是相同的,所以,可以微信提供了自定义组件的方式,可以将我们经常使用的组件封装起来,可以使得开发效率更高,让我们...

    1. 自定义组件

    在微信小程序的开发中,经常需要在不同的地方使用一些相同的组件,这些组件的样式,数据,以及点击事件都是相同的,所以,可以微信提供了自定义组件的方式,可以将我们经常使用的组件封装起来,可以使得开发效率更高,让我们对于小程序的开发更加的深刻.
    自定义组件官方文档
    新建一个组件对应以下几个步骤:

    1. 新建一个专门用于存放组件的文件夹,可以命名为cmps(命名可以随意)

    2. 在cmps文件夹下,新建文件夹及组件Component(注意不是新建Page);
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPAtnVkA-1588769252736)(https://upload-images.jianshu.io/upload_images/6266734-4067be3b67e6101d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    3. 和新建page一样,组件也有4个对应的文件,分别是js,json,wxml,wxss.
      注意:微信官方的命名一般使用的中横线隔开,例如movie-item,所以命名的时候规则尽量与官方的一致.

    2. 自定义组件的封装和使用

    以我此次学习封装的movie-item为例,将整个的item的wxml,wxss,js等代码移动到对应的movie-item文件中,此处不再赘述,其中需要注意的是一些布局的代码,有些布局,例如item的宽度,这些在内部就可以写好,在外部的代码就可以直接删除:
    image.png

    2.1 组件的使用

    在封装以后可以预先编译一下看看封装是否能达到效果,组件的使用如下:

    • 在需要使用组件的page的.json文件中,加入以下代码:
    {
      "usingComponents": {
        /* key:value   key是组件的命名,一般和原有名称相同,value是组件的路径*/
        "movie-item":"/cmps/movie-item/movie-item"
      }
    }
    
    • 在wxml中直接使用movie-item标签:
    <movie-item 
        class="item"
        wx:key="unique" 
        wx:for="{{ row.movies }}" 
        wx:for-item="movie"
        movie="{{movie}}">
    </movie-item>
    
    

    在封装以后可以编译一下看到效果:

    image.png
    所以到这里封装成功了一小半,接下来需要将数据传给每个对应的item就行;

    2.1 数据的处理:属性

    当我们在封装好一个component后,这个组件需展示外部赋值的数据,在component.js文件中,有一个对应的properties可以用来传递参数赋值:
    属性的定义如下:
    命名:{ type:类型(String,Number,Object等),value:默认值(选填)}

    Component({
      properties: {
        // 这里定义了innerText属性,属性值可以在组件使用时指定
        innerText: {
          type: String,
          value: 'default value',
        },
        movie:{
            type:Object,
            value:null
          }
      },
      data: {
        // 这里是一些组件内部数据
        someData: {}
      },
      methods: {
        // 这里是一个自定义方法
        customMethod: function(){}
      }
    })
    
    

    传递过来的movie的赋值给图片等东西以后,自定义组件的逻辑就实现了一半了,接下来就是实现点击事件等的添加;

    2.2 点击事件的添加

    例如我封装的每个movie-item,在不同的页面响应的事件应该是相同的,跳转的都是电影详情;
    事件绑定

    1. wxml文件中先绑定事件:
    <view class="item" bindtap="enterDetail"></view>
    

    在自定义的组件中,以我自定义的movie-item为例,在.js文件中,有一个methods方法:

    /**
     * 组件的方法列表
     */
    methods: {
       enterDetail:function(){
         wx.navigateTo({
           url: `/pages/detail/detail?title=${this.data.movie.title}`,
         });
       }
    }
    

    3. 页面间的数据传递

    在由movie-item跳转到电影详情detail的时候,需要将电影信息传递到detail页面,数据的传递有以下几种方式:

    3.1 存储和读取

    使用setStorage和getStorage方法,在进入页面之前通过电影名将电影信息存储起来,进入到电影页面通过电影名读取电影信息;

    3.2 通过页面跳转url后拼接参数传递

    页面跳转的url后面可以拼接参数:
    注意:

    • url后面的参数拼接只能是字符串,例如:

      url: /pages/detail/detail?title=${this.data.movie.title},

    • 不能直接将movie对象直接拼接到url后面;

    另一种做法是将movie对象转化为json字符串,然后,在detail页面中将字符串转成对象:
    JSON和对象互转用法:JSON.stringify和JSON.parse

    methods: {
            enterDetail:function(){
             // 序列化:将JSON对象转换为JSONString
             // 反序列化:将JSONString转换为JSON对象
              wx.navigateTo({
                url: `/pages/detail/detail?movie=${JSON.stringify(this.data.movie)}`,
              });
            }
     }
    
    

    在detail页面的js文件onload方法中将参数转化为movie对象:

    /**
      * 生命周期函数--监听页面加载
      */
     onLoad: function (options) {
           console.log(options);
           let movie = JSON.parse(options.movie);
           console.log(movie);
       
           wx.setNavigationBarTitle({
             title: movie.title,
           }); 
     },
    
    

    打印url,options和movie对象如下:
    image.png

    3.3 使用eventChannel双向传递数据

    在微信官方文档中链接,传递数据和监听打开页面事件响应使用了eventChannel,这是一个双向的channel, 使用起来也比较方便,所以相比较前两种方法,这种更适合页面间较大数据,对象等的传递,简单的值传递使用url拼接参数就可以实现. 以下是实现代码示例:

    movie-item.js中的代码:

    methods: {
        enterDetail:function(){
          wx.navigateTo({
            url: '/pages/detail/detail',
            success: (result) => {
              //通过eventChannel向被打开的页面传递数据
              result.eventChannel.emit('sendDataToDetail',{data:this.data.movie});
            },
    
            events: {
              // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
              acceptDataFromOpenedPage: function(data) {
                console.log(data)
              },
              someEvent: function(data) {
                console.log(data)
              }
            },
            fail: () => {},
            complete: () => {}
          });
        }
      }
    
    

    跳转页面detail.js中的代码:

    /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        const eventChannel = this.getOpenerEventChannel();
        // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
        eventChannel.on('sendDataToDetail',function(data){
          console.log(data);
        });
        
        //向上一级页面返回数据
        eventChannel.emit('acceptDataFromOpenedPage',{data:'sentBackTest'});
        eventChannel.emit('someEvent', {data: 'test'});
          
      },
    
    

    打印如下:
    image.png

    还有很多传递数据的方式,比如可以在app.json中,给某个全局的对象如wx.db定义一个movie对象,每次在页面跳转前给这个对象赋值等.

    实际上只要能实现传递数据的效果的方法都可以,但是,如果后期要增加多个数据或者对象,使用url拼接的方式就会显得很复杂,使用eventchannel的方式后期增加参数没有压力,所以视开发需求情况而定;

    4. 自定义导航栏

    导航栏设置:在开发中有时候需要设置导航栏颜色,title,动画,字体颜色等,如果使用的是系统的导航栏,这些官方都提供了api可以直接设置.

    但是在实际开发过程中,有时候系统的导航栏很大可能不能满足我们开发的需求;
    image.png

    比如:在页面多次跳转以后,需要在导航栏上加上一个可以返回首页的按钮,这种情况下系统导航栏没有给我们提供api,也没有对应的组件,这时候就需要我们自定义导航栏来实现;

    4.1 自定义导航栏需要实现的功能

    • 可以展示系统导航栏没有的子控件,并且可以控制在不同页面展示和隐藏;
    • 适配不同机型问题:
      • 在有刘海的设备上:例如iPhone X,华为等,状态栏高度不一样,需要动态设定;
      • android设备navBar的高度是48,iOS设备navBar的高度是44,也需要动态设定;
    • 提供api给外界设置title,color,font等样式.

    自定义导航栏方式:

    1. 在app.json中设置navigationBarStyle为custom,这样每个界面的导航栏就消失了,然后需要在每个界面自己添加自定义的导航栏
      系统导航栏

    全局配置: 未配置默认样式是default, 配置样式custom(自定义)以后,如图所示,搜索框的起始位置是从0开始的,在未配置以前是从导航栏的底部开始的.

    "window": {
        "navigationStyle":"custom"
      },
    

    系统导航栏隐藏后

    4.2 获取状态栏高度

    获取系统信息

    可以在app.js中,通过wx.getSystemInfoSync()方法获取设备的信息
    image.png

    const info = wx.getSystemInfoSync();
        wx.db.statusBarHeight = info.statusBarHeight;
        if(info.system =='android'){
          wx.db.navBarHeight = 48;
        }else{
          wx.db.navBarHeight = 44;
        }
    

    4.3 导航栏的封装和实现

    和movie-item一样,创建一个nav-bar组件,然后对应子控件,属性等,以下是具体代码.

    wxml中的代码如下:

    • 通过设置style来动态设置statusBar和navBar的高度;
    • 通过wx:if判断属性值控制back和home是否展示
    <view class="container">
      <view class="status-bar" style="{{statusBarStyle}}">    
      </view>
      <view class="nav-bar" style="{{navBarStyle}}">
        {{title}}
        <view class="icons">
        <image bindtap="backClick" wx:if="{{ back == 'true' }}" class="back" src="/assets/imgs/nav_back.png"></image>
        <image bindtap="homeClick" wx:if="{{ home == 'true' }}" class="home" src="/assets/imgs/nav_home.png"></image>
        </view>
      </view>  
    </view>
    

    wxss中的代码如下:

    • back和home居左,使用了相对和绝对布局;
    • statusBar和navBar的高度通过wxml中的style设定;
    .nav-bar{
        display: flex;
        justify-content: center;
        align-items: center;
        position: relative;
    }
    
    .icons{
        position:absolute;
        left: 25rpx;
        display: flex;
        align-items: center;
    }
    
    .home{
        height: 36rpx;
        width: 36rpx;
    }
    
    .back{
        height: 36rpx;
        width: 36rpx;
        margin-right: 20rpx;
    }
    

    js中的代码如下:

    • 在属性列表中的属性也可以通过this.data.xxx来获取;
    • 返回上一级页面和home,可以设置wx.navgateBack()中的delta值来判断,(微信页面的层级最多10层,所以返回home,可以设置一个很大的数字);
    • 在具体的页面想要监听返回和返回首页,可以使用this.triggerEvent来实现;
    • 动态设置状态栏和导航栏的高度,在组件的声明周期lifetimes中,在组件即将被加载时设置,然后使用this.setData()方法刷新;
    Component({
      /**
       * 组件的属性列表
       */
      properties: {
        title:{
          type:String,
          value:"豆瓣评分"
        },
        back:{
          type:String,
          value:"true"
        },
        home:{
          type:String,
          value:"false"
        },
        statusBarColor:{
          type:String,
          value:'#fff'
        },
        navBarColor:{
          type:String,
          value:'#fff'
        }
      },
    
      /**
       * 组件的初始数据
       */
      data: {
        statusBarStyle:'',
        navBarStyle:''
    
      },
    
      /**
       * 组件的方法列表
       */
      methods: {
        backClick:function(){
          this.triggerEvent('backTap');
           wx.navigateBack({
             delta: 1
           }); 
        },
        homeClick:function(){
          this.triggerEvent('homeTap');
          wx.navigateBack({
            delta: 999
          });
        }
      },
    
      lifetimes: {
        attached: function() {
          const statusBarStyle=`height:${wx.db.statusBarHeight}px;background-color:${this.data.statusBarColor}`;
          const navBarStyle=`height:${wx.db.navBarHeight}px;background-color:${this.data.navBarColor}`;
          this.setData({statusBarStyle,navBarStyle});
        },
        detached: function() {
          // 在组件实例被从页面节点树移除时执行
        },
      },
    })
    
    

    不同页面样式的导航栏如下:

    首页-没有back没有home

    list-没有home

    detail-back和home都有

    学习完自定义组件以后,可以更好的了解微信小程序开发的流程,能够更好的锻炼自己.
    原文链接

    展开全文
  • 得到Android状态栏高度

    2016-03-09 19:07:31
    状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使用的,例如像通常使用系统资源那样android.R.dimen.status_bar_height。但是系统给我们提供了一个Resource类,通过这个类我们可以...
  • 前言 使用自定义导航,产品可以对导航栏进行深度定制,对与场景比较复杂的小程序来说,可以明显的提高用户体验。...自定义导航栏高度计算 通过 wx.getSystemInfo 获取设备信息,screenHeight - wi...
  • index.vue <template> <view class="content"> <tabBar/> </view> </template> <script> import tabBar from "../components/tabBar.vue" ... componnet...
  • 十多天没写博客了,很惭愧,因为最近做的东西与Android并没有什么关系,公司需要做微信端口的一个微信打印的功能,已经好久没接触java后台开发相关了,所以多花了点时间去看,最后因为暂时没有特定的打印机停了下了...
  • iPhone开发当中,有时需要获取状态栏和导航栏高度、宽度信息,方便布局其他控件。下面介绍一下如何获取这些信息:   [objc] view plain copy   // 状态栏(statusbar)  CGRect rectStatus = ...
  • iPhone开发当中,有时需要获取状态栏和导航栏高度、宽度信息,方便布局其他控件。下面介绍一下如何获取这些信息: // 状态栏(statusbar) CGRect rectStatus = [[UIApplication sharedApplication] statusBarFrame...
  • 在小程序开发的过程中,会遇到一些页面上的要求,要求实现顶部导航的渐变如何实现,因为小程序做了一些封装,下面看看页面的布局图: 如图所示,实际上我们能够操作的页面只有中间那一块,那么,如果客户需要...
  • iPhone开发当中,有时需要获取状态栏和导航栏高度、宽度信息,方便布局其他控件。下面介绍一下如何获取这些信息: // 状态栏(statusbar) CGRect rectStatus = [[UIApplication sharedApplication] ...
  • 注册微信小程序 如果你还没有微信公众平台的账号,请先进入微信公众平台首页,点击 “立即注册” 按钮进行注册。... ... 激活邮箱之后,选择主体类型为 “个人类型”,并按要求登记主体信息。主体信息提...
  • 微信小程序 自定义头部导航 navigationStyle,修改微信小程序默认情况下只有返回的按钮,具体使用方法很简单,这里是直接使用组件方式,
  • 相信很多小伙伴在开发微信小程序的时候都会有自定义顶部导航的需求,不够要说明的是小程序右上角的胶囊是不能自定义的哦,除了胶囊其他地方都是可以根据自己的项目而定了,在一次小程序开发中就需要对顶部进行...
  • 最近公司有一个微信小程序的项目,最终决定使用uni-app进行开发,但是遇到了一个问题 自定义导航栏高度在不同手机上无法达到视觉上的统一 导航栏元素无法对齐胶囊按钮 现在存在各种尺寸的全面屏和刘海屏需要适应 ...
  • 屏幕高度问题 小程序中有时候需要获取屏幕高度使用,简单的通过wx.getSystemInfo即可获取到手机的系统信息 ...对于小程序来说屏幕的高度 = 状态栏高度 + 导航栏高度 + 窗口高度 + 标签栏高度,如下...
  • 自定义导航栏功能:返回上一页,回到主页,音乐播放控制,标题。 要求:导航栏与微信右上角的默认椭圆转发关闭按钮水平对齐,高度一致。...获取该设备的状态栏高度,即statusBarHeight。  2.获...
  • 以下是自己遇到的一些坑,根据查资料得到的一些方法。 1、防止手机中网页放大和缩小,这点是最基本的,最为手机网站开发者来说应该都知道的,就是设置meta中的viewport 使用viewport使页面禁止缩放。...
1 2 3 4 5 ... 20
收藏数 4,461
精华内容 1,784