React Native 如何实现绝对定位的loading?

React Native的初学者应该了解RN支持且只支持Flex布局。Flex布局相对于Android来说就是LinearLayout线性布局。那么线性布局怎样实现一个垂直居中的loading呢?

loading应该是在三维z轴高于普通视图的,用绝对布局实现的,那么RN支持绝对布局吗? 答案:是的,RN支持。使用position: 'absolute'来实现。

RN中的position属性的默认值是relative。只支持两个值relative | absolute。了解CSS的同学对它应该很熟悉,relative指的是相对定位,配合top, right, bottom, left四个方位属性,加上z-index堆叠顺序来对一个元素进行相对于自己左上角为原点的定位。比如:

相对布局示例

相对定位的元素没有脱离文档流,依然占据着原来的空间,不影响周边元素的位置,如果与其他元素相遇,按照z-index来觉得谁显示在“上面”而被我们看到,这个方式可以理解为“灵魂出窍”,“灵魂”展示在那里,但“窍”还占据着原有的空间。对应上面的示例中,尽管“积分商城”这个元素采用相对定位进行了移动,但是后面的文案位置依然没有受到影响。

absolute即绝对定位,它是相对于父级元素的左上角为原点来定位。
(补充:CSS中是相对最近的一个非static的元素作为父级,但是RN没那么复杂,只是相对于它的父级,因为上文提到,RN中的position属性的默认值是relative。只支持两个值relative | absolute。)

绝对定位的元素不会占据原有的流式空间,后面的元素会“补上来”,比如,我们将之前的示例中的relative改成absolute, 看看后面的文案是否收到影响:


了解position以后,我们就可以使用其做一个绝对定位,垂直居中的loading了。垂直居中怎样实现呢?比如一个宽高为,就可以这样写:

    loading:{
        width: 100,
        height: 100,
        position: 'absolute',
        top: '50%',
        left: '50%',
        marginTop: -50,
        marginLeft: -50
    }

loading示例

topmarginTop这样的配合方式就不多说了,要注意的是这个元素的父级最好是页面最外层或者是高度100%的元素。
如果是一个不定高度的ScrollView,可以将loading至于ScrollView同级,然后外边套一个View的父级就OK了。

本文以loading为例,主要介绍了绝对定位与Flex布局的结合使用,实际项目中建议使用原生的loading组件。

延伸思考:

  1. RN中,如何禁止loading,蒙层下面的点击事件?
  2. 不定宽高的元素怎样绝对居中?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,854评论 1 92
  • 收听音频,戳链接,旧号itclan已暂停使用,欢迎关注微信itclanCoder公众号可收听更多音频 前言 关于网...
    itclanCoder阅读 8,247评论 3 30
  • CSS 是什么 css(Cascading Style Sheets),层叠样式表,选择器{属性:值;属性:值}h...
    崔敏嫣阅读 1,517评论 0 5
  • 最近流行一首歌《春节自救手册》,歌曲描绘了年关逼近。许多单身汉纠结的问题,即想回家看看父母。会会朋友。又怕自己招架...
    雪辉心语阅读 191评论 0 0
  • In me, past, present, future meet,于我,过去、现在和未来, To hold lo...
    小葱大虾阅读 294评论 0 1