React Native绝对定位水平中心

Has*_*sen 74 position absolute flexbox react-native

似乎position:absolute在使用中元素不能使用justifyContent或居中alignItems.有一种解决方法可以使用,marginLeft但即使使用尺寸来检测设备的高度和宽度,也不会为所有设备显示相同的解决方法.

  bottom: {
    position: 'absolute',
    justifyContent: 'center',
    alignItems: 'center',
    top: height*0.93,
    marginLeft: width*0.18,
  },
  bottomNav: {
    flexDirection: 'row',
  },
Run Code Online (Sandbox Code Playgroud)

Ste*_*ath 179

将您想要居中的孩子包裹在视图中并使视图绝对.

<View style={{position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, justifyContent: 'center', alignItems: 'center'}}>
  <Text>Centered text</Text>
</View>
Run Code Online (Sandbox Code Playgroud)

  • 很有用.对于那些挂在`StyleSheet`对象上的样式参数,有一个很好的快捷方式:`... StyleSheet.absoluteFillObject`.请参阅https://github.com/facebook/react-native/blob/master/Libraries/StyleSheet/StyleSheet.js#L29 (17认同)
  • @ James111看起来你可以添加`pointerEvents ='box-none'来通过视图传递触摸:https://github.com/facebook/react-native/issues/12360 (8认同)
  • 这是否会使“视图”占据屏幕上所有可点击的空间?例如,如果我在此绝对定位的“视图”下面有一个组件,则无法在其上注册点击。 (2认同)

Dav*_*eña 46

如果你想将一个元素本身居中,可以使用alignSelf:

logoImg: {
    position: 'absolute',
    alignSelf: 'center',
    bottom: '-5%'
}
Run Code Online (Sandbox Code Playgroud)

这是一个示例(请注意,徽标父级是一个位置为相对的视图)

在此输入图像描述

  • alignSelf 对我不起作用(事实上,它什么也没做)。您能为代码添加更多上下文吗? (3认同)
  • 这应该是公认的答案。接受的阻止用户通过触摸访问绝对视图下的元素。这非常有效。 (2认同)

Cor*_*rey 10

您可以通过提供左侧属性来设置绝对项目,其中设备的宽度除以2并减去您想要居中宽度的元素的一半.

例如,您的样式可能看起来像这样.

bottom: {
    position: 'absolute',
    left: (Dimensions.get('window').width / 2) - 25,
    top: height*0.93,
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您不知道元素没有已知宽度,您可以使用 onLayout 来获取元素宽度 `measure(layout) { const { width } = layout; this.setState({ width: width }) } ... &lt;View onLayout={(event) =&gt; { this.measure(event.nativeEvent.layout) }} ... ` (3认同)
  • 仅当您事先知道元素宽度时这才有效 (2认同)

小智 8

创建一个全宽ViewalignItems: "center"然后在里面插入所需的子项。

import React from "react";
import {View} from "react-native";

export default class AbsoluteComponent extends React.Component {
  render(){
    return(
     <View style={{position: "absolute", left: 0, right: 0, alignItems: "center"}}>
      {this.props.children}
     </View>    
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以bottom: 30为底部对齐的组件添加属性。


Mah*_*our 6

<View style={{...StyleSheet.absoluteFillObject, justifyContent: 'center', alignItems: 'center'}}>
    <Text>CENTERD TEXT</Text>
</View>
Run Code Online (Sandbox Code Playgroud)

并添加这个

import {StyleSheet} from 'react-native';
Run Code Online (Sandbox Code Playgroud)

  • Stack Overflow 上常常不赞成简短、仅包含代码的答案。为了避免被标记为“低质量”,请考虑添加一些解释性文本。 (2认同)