React Native에서 수평 규칙 그리기


102

react-native-hr 패키지를 사용해 보았습니다 -나에게도, Android 나 iOS에서도 작동하지 않습니다.

다음 코드는 끝에 세 개의 점을 렌더링하기 때문에 적합하지 않습니다.

<Text numberOfLines={1}}>               
    ______________________________________________________________
</Text>

<Text> __________ 레벨 {level} __________ </ Text>
Omar bakhsh

답변:


312

하단 테두리가있는 빈 뷰를 간단히 사용할 수 있습니다.

<View
  style={{
    borderBottomColor: 'black',
    borderBottomWidth: 1,
  }}
/>

52
나는 추천 borderBottomWidth: StyleSheet.hairlineWidth:
라이언 Pergent에게

17
작동하지 않으면 alignSelf : 'stretch'를 추가하는 것이 좋습니다.
Scientist1642

1
보기에 대한 WIDTH 값을 지정해야합니다.
Mohamed Ben Hartouz 2019

이것으로 선을 그릴 수 있지만 좌우에 여백이 있습니다. 나는 끝과 끝을 그리려
Abhi

@Abhi이 답변과 관련이없는 문제인 것 같습니다. 당신이 솔루션을 찾을 수없는 경우 새 질문을 만드십시오
앙투안 Grandchamp

23

여백을 사용하여 선의 너비를 변경하고 중앙에 배치 할 수 있습니다.

import { StyleSheet } from 'react-native;
<View style = {styles.lineStyle} />

const styles = StyleSheet.create({
  lineStyle:{
        borderWidth: 0.5,
        borderColor:'black',
        margin:10,
   }
 });

여백을 동적으로 제공하려면 Dimension width를 사용할 수 있습니다.


감사. <View style = {styles.lineStyle} />사이에 아무것도 없기 때문에 당신은 또한 할 수 있습니다 ;-)
Martin Nordström

Smit styles.lineStyleconst styles = StyleSheet.create({ lineStyle: ... });여기에 해당합니다 . 당신 lineStyle = { ...}은 문제를 일으킬 것입니다. 있는 완벽한 솔루션이 styles.lineStyle될 수있다 const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
kevr

네. 네가 옳아. 여기에서는 lineStyleStyleSheet 안에 넣었다고 가정합니다 .
Smit

13

flexbox선 중앙에 텍스트가 있어도 속성이 있는 구분 기호를 그릴 수있었습니다 .

<View style={{flexDirection: 'row', alignItems: 'center'}}>
  <View style={{flex: 1, height: 1, backgroundColor: 'black'}} />
  <View>
    <Text style={{width: 50, textAlign: 'center'}}>Hello</Text>
  </View>
  <View style={{flex: 1, height: 1, backgroundColor: 'black'}} />
</View>

여기에 이미지 설명 입력


1
이것은 최선의 대답은, 그것은 확장하고 사용자가 텍스트를 설정하지 않은 경우 동적 될 것 폭
newoda

12

최근에이 문제가 발생했습니다.

<Text style={styles.textRegister}> ────────  Register With  ────────</Text>

이 결과 :

영상


27
이것은 확장 성이 좋지 않습니다
페트루스 테론에게

저것과 같이 쉬운.
Siraj Alam

@PetrusTheron 왜 잘 확장되지 않습니까?
Nate Glenn

@NateGlenn 하이픈은 좁은 디스플레이에서 줄 바꿈되거나 더 넓은 디스플레이에서 너무 얇게 나타납니다.
Petrus Theron

아, 말이 되네요. 아주 짧은 줄만 필요하면 해결책이 좋다고 생각합니다.
Nate Glenn

9

이렇게 했어요. 도움이 되었기를 바랍니다

<View style={styles.hairline} />
<Text style={styles.loginButtonBelowText1}>OR</Text>
<View style={styles.hairline} />

스타일 :

hairline: {
  backgroundColor: '#A2A2A2',
  height: 2,
  width: 165
},

loginButtonBelowText1: {
  fontFamily: 'AvenirNext-Bold',
  fontSize: 14,
  paddingHorizontal: 5,
  alignSelf: 'center',
  color: '#A2A2A2'
},

최선의 해결책이라고 생각합니다. 다른 답변처럼 테두리를 사용하는 것보다 낫습니다.
Erick M. Sprengel 2018 년

하드 코딩 너비는 약간의 문제가 될 수 있습니다.
Godfrey

5

시도해 볼 수도 있습니다. react-native-hr-component

npm i react-native-hr-component --save

코드 :

import Hr from 'react-native-hr-component'

//..

<Hr text="Some Text" fontSize={5} lineColor="#eee" textPadding={5} textStyles={yourCustomStyles} hrStyles={yourCustomHRStyles} />

4
그것은 약간의 과잉입니다
Led는

3

이것은 오늘 업데이트 된 React Native (JSX) 코드입니다.

<View style = {styles.viewStyleForLine}></View>

const styles = StyleSheet.create({
viewStyleForLine: {
    borderBottomColor: "black", 
    borderBottomWidth: StyleSheet.hairlineWidth, 
    alignSelf:'stretch',
    width: "100%"
  }
})

둘 중 하나 alignSelf:'stretch'또는 width: "100%"둘 다 사용할 수 있습니다 .

borderBottomWidth: StyleSheet.hairlineWidth

여기 StyleSheet.hairlineWidth에 가장 얇은 것이 있습니다.

borderBottomWidth: 1,

선의 두께를 늘리기 위해 등등.


3

재사용 가능한 Line구성 요소를 만드는 것이 저에게 효과적 이었습니다.

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

export default function Line() {
    return (
        <View style={{
            height: 1,
            backgroundColor: 'rgba(255, 255, 255 ,0.3)',
            alignSelf: 'stretch'
        }} />
    )
}

이제 Line어디서나 가져 와서 사용할 수 있습니다.

<Line />

2
import { View, Dimensions } from 'react-native'

var { width, height } = Dimensions.get('window')

// Create Component

<View style={{
   borderBottomColor: 'black', 
   borderBottomWidth: 0.5, 
   width: width - 20,}}>
</View>

2

기본 요소 구분선을 사용할 수 있습니다.

다음과 함께 설치하십시오.

npm install --save react-native-elements
# or with yarn
yarn add react-native-elements

import { Divider } from 'react-native-elements'

그런 다음 다음으로 이동하십시오.

<Divider style={{ backgroundColor: 'blue' }} />

출처


2
전체 패키지 (그리고 아마도 큰 패키지)를 설치하는 것은 수평선 만 필요하다면 과잉처럼 보입니다.
Sandy

<Divider /> 구성 요소 만 사용하는 경우 과도 하지만 라이브러리를 사용하여 간단한 버튼, 검색 창 등의 스타일을 지정하는 데 시간을 절약해야합니다. 앱에 대해 할 수있는 모든 작업을 확인하세요. react-native-elements.github.io/react-native-elements
jso1919

1

이런 식으로하지 그래요?

<View
  style={{
    borderBottomWidth: 1,
    borderBottomColor: 'black',
    width: 400,
  }}
/>


0
import {Dimensions} from 'react-native'

const { width, height } = Dimensions.get('window')

<View
  style={{
         borderBottomColor: '#1D3E5E',
         borderBottomWidth: 1,
         width : width , 
  }}
/>

코드는 이런 종류의 문제가있는 사람들에게 너무 분명하므로 더 설명 할 수 있다면 그렇게 할 것입니다.
Mohamed Ben Hartouz 2019

0

이것이 내가 중간에 수평선과 텍스트로 구분선을 해결 한 방법입니다.

<View style={styles.divider}>
  <View style={styles.hrLine} />
  <Text style={styles.dividerText}>OR</Text>
  <View style={styles.hrLine} />
</View>

그리고 이것을위한 스타일 :

import { Dimensions, StyleSheet } from 'react-native'

const { width } = Dimensions.get('window')

const styles = StyleSheet.create({
divider: {
    flexDirection: 'row',
    alignItems: 'center',
    marginTop: 10,
  },
  hrLine: {
    width: width / 3.5,
    backgroundColor: 'white',
    height: 1,
  },
  dividerText: {
    color: 'white',
    textAlign: 'center',
    width: width / 8,
  },
})

0

높이가 작은 View 구성 요소를 만드십시오.

<View style={{backgroundColor:'black', height:10}}/>

0

흰색과 같은 단색 배경이있는 경우 다음이 해결책이 될 수 있습니다.

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

const styles = StyleSheet.create({
  container: {
    flex: 0,
    backgroundColor: '#FFFFFF',
    width: '100%',
  },
  hr: {
    position: 'relative',
    top: 11,
    borderBottomColor: '#000000',
    borderBottomWidth: 1,
  },
  or: {
    width: 30,
    fontSize: 14,
    textAlign: 'center',
    alignSelf: 'center',
    backgroundColor: '#FFFFFF',
  },
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.