React-native 视图自动宽度由内部文本

IT技术 javascript reactjs react-native
2021-04-02 07:55:35

据我所知,react-native 样式表不支持 min-width/max-width 属性。

我在里面有一个视图和文本。自动宽度中的视图不会通过继承文本元素调整大小。

如何解决该问题并使用文本宽度自动设置视图宽度?

我的代码是:

 <View style={{backgroundColor: '#000000'}}>
      <Text style={{color: '#ffffff'}}>Sample text here</Text>
 </View>

在常见的 HTML/CSS 中,我会意识到:

 <div style="background-color: #000; display: inline;">Sample text here</div>

注意: flex: 1 在父视图上对我没有帮助。文本显示为

"Sam"
"ple"
"Tex"
"t"
6个回答

"alignSelf" 与 'display: inline-block' 在普通 HTML/CSS 中的作用相同,对我来说效果很好。

<View style={{backgroundColor: '#000000', alignSelf: 'flex-start' }}>
 <Text style={{color: '#ffffff'}}>
  Sample text here
 </Text>
</View>
@SanketSahu 感谢您更新答案。我重新阅读了我的评论,就像“什么时候alignSelf?”
2021-05-30 07:55:35
天才,谢谢。是继alignSelf: 'flex-start'Text本身有必要吗?
2021-06-06 07:55:35
@JoshuaPinter 我确认 -alignSelf: 'flex-start'不需要Text
2021-06-15 07:55:35
想知道为什么视图占据了整个宽度..这解决了它!
2021-06-16 07:55:35
绝对没错!我建议也使用 'minHeight' 属性!
2021-06-21 07:55:35

两种解决方案

文本组件适合文本内容

https://facebook.github.io/react-native/docs/text.html#containers

您可以将<Text>组件包装到另一个<Text>组件中。

通过这样做,里面的所有东西都不再使用 flexbox 布局,而是使用文本布局

<Text>
   <Text>{'Your text here'}</Text>
</Text>

渲染 1

视图容器适应嵌套 Text 组件的内容

在这种情况下,您需要使用propsalignSelf才能看到容器缩小到其内容的大小。

<View>
  <View style={{ alignSelf: 'center', padding: 12}} >
     <Text>{'Your text here'}</Text>
  </View>
</View>

渲染 2

经过几个小时的 flexbox 挣扎,这个简单的技巧为我解决了一切。
2021-05-31 07:55:35
第二个选项效果很好,但只有将 style={{ flex:0 }} 应用于有文本的视图,才能工作!(它确实适用于视图中的任何其他子项,例如如果您有一个按钮、一个图标或另一个视图,当您使用 flex:0 时,您将删除组件使用 flexbox 增长的属性)
2021-06-13 07:55:35

如果您想将宽度应用于View基于<Text>,您可以执行以下操作:

<View style={styles.container}>
   <Text>
     {text}
   </Text>
</View>

const styles = StyleSheet.create({
  container: {
    flexDirection:"row",
    alignSelf:"flex-start",
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
    padding: 8,
  }
});

工作演示

tldr:设置alignItems'stretch'包含文本的视图的父视图样式以外的任何值

您面临的问题可能与 React NativealignItems: 'stretch'<View />元素的默认值有关基本上,<View />默认情况下,所有元素都会使其子元素沿交叉轴(与 相对的轴)拉伸flexDirection在父视图上设置alignItems为除"stretch"("baseline"、"flex-start"、"flex-end" 或 "center")之外的任何值可防止此行为并解决您的问题。

下面是一个示例,其中在带有蓝色边框的父视图中包含两个 View 元素。这两个 View 元素每个都包含一个环绕 Text 元素的 View。在第一个具有默认样式的 View 的情况下,黄色子 View 水平扩展以填充整个宽度。在第二个 View where 中alignItems: 'baseline',粉红色 View 不会扩展并保持其子 Text 元素的大小。

在此处输入图片说明

<View style={{ borderWidth: 5, borderColor: 'blue' }}>
    <View>
        <View style={{ backgroundColor: 'yellow' }}>
            <Text style={{ fontSize: 30 }}>Hello</Text>
        </View>
    </View>
    <View style={{ alignItems: 'baseline' }}>
        <View style={{ backgroundColor: 'pink' }}>
            <Text style={{ fontSize: 30 }}>Hello</Text>
        </View>
    </View>
</View>

align-items属性在这里得到了很好的解释

或者干脆:

  <Text style={{color: '#ffffff', alignSelf: 'center'}}>Sample text here</Text>