Gambarlah aturan horizontal di React Native


97

Saya sudah mencoba paket react-native-hr - tidak berfungsi untuk saya atau di Android atau di iOS.

Kode berikut juga tidak cocok karena membuat tiga titik di akhir

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

<Teks> __________ Level {level} __________ </Text>
Omar bakhsh

Jawaban:


296

Anda cukup menggunakan View kosong dengan batas bawah.

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

49
Saya merekomendasikan borderBottomWidth: StyleSheet.hairlineWidth:)
Ryan Pergent

16
jika tidak berhasil, pertimbangkan untuk menambahkan alignSelf: 'stretch'.
Scientist1642

1
Anda harus menentukan nilai WIDTH untuk tampilan tersebut.
Mohamed Ben Hartouz

dengan ini mampu menarik garis tetapi kiri dan kanan ada margin. Saya ingin menggambar ujung ke ujung
Abhi

@Abhi Sepertinya masalah yang tidak terkait dengan jawaban ini. Harap buat pertanyaan baru jika Anda tidak menemukan solusi
Antoine Grandchamp

22

Seseorang dapat menggunakan margin untuk mengubah lebar garis dan menempatkannya di tengah.

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

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

Jika Anda ingin memberikan margin secara dinamis maka Anda dapat menggunakan lebar Dimensi.


Terima kasih. Anda juga bisa saja <View style = {styles.lineStyle} />karena tidak ada di antara ;-)
Martin Nordström

Smit styles.lineStyleakan sesuai dengan di const styles = StyleSheet.create({ lineStyle: ... });sini. Anda hanya memiliki lineStyle = { ...}yang akan menyebabkan masalah. Solusi lengkap dengan styles.lineStylebisa const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
kevr

ya. kamu benar. di sini saya berasumsi bahwa Anda memasukkannya ke lineStyledalam StyleSheet Anda.
Smit

12

Saya baru saja mengalami masalah ini.

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

dengan hasil ini:

Gambar


25
Ini tidak berskala baik
Petrus Theron

sesimpel itu.
Siraj Alam

@ PetrusTheron mengapa tidak berskala dengan baik?
Nate Glenn

Tanda hubung @NateGlenn akan membungkus pada tampilan yang sempit atau tampak terlalu tipis pada tampilan yang lebih lebar.
Petrus Theron

Ah, masuk akal. Saya pikir solusinya baik-baik saja jika Anda hanya membutuhkan jalur yang sangat pendek.
Nate Glenn

9

Saya melakukannya seperti ini. Semoga ini membantu

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

untuk gaya:

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

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

Saya pikir itu solusi terbaik. Lebih baik daripada menggunakan border seperti jawaban lainnya.
Erick M. Sprengel

Lebar hardcode mungkin sedikit menjadi masalah.
Godfrey

9

Saya bisa menggambar pemisah dengan flexboxproperti bahkan dengan teks di tengah garis.

<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>

masukkan deskripsi gambar di sini


1
Ini adalah jawaban terbaik, berskala dan jika Anda tidak mengatur lebar Teks, itu akan menjadi dinamis
newoda

5

Anda juga bisa mencoba react-native-hr-component

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

Kode Anda:

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

//..

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

4
Itu sedikit berlebihan
Dipimpin

3

Ini ada dalam kode React Native (JSX), diperbarui hingga hari ini:

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

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

Anda dapat menggunakan salah satu alignSelf:'stretch'atau width: "100%"keduanya harus berfungsi ... dan,

borderBottomWidth: StyleSheet.hairlineWidth

di sini StyleSheet.hairlineWidthadalah tertipis, maka,

borderBottomWidth: 1,

dan seterusnya untuk menambah ketebalan garis.


3

Membuat Linekomponen yang dapat digunakan kembali berhasil untuk saya:

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'
        }} />
    )
}

Sekarang, Impor dan gunakan di Linemana saja:

<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

Anda dapat menggunakan pembagi elemen asli.

Instal dengan:

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

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

Lalu pergi dengan:

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

Sumber


2
Menginstal seluruh paket (dan kemungkinan besar) sepertinya berlebihan jika Anda hanya membutuhkan garis horizontal.
Sandy

Memang berlebihan jika Anda hanya akan menggunakan <Divider /> komponen, namun, Anda harus menggunakan pustaka dengan cara apa pun untuk menghemat waktu dalam menata tombol sederhana, Bilah Pencarian, dll ... dll ... Periksa semua yang dapat dilakukannya untuk aplikasi Anda react-native-elements.github.io/react-native-elements
jso1919

1

Mengapa Anda tidak melakukan hal seperti ini?

<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 , 
  }}
/>

Kode ini sangat jelas bagi mereka yang memiliki masalah seperti ini, jadi jika saya bisa menjelaskan lebih lanjut, saya akan melakukannya.
Mohamed Ben Hartouz

0

Beginilah cara saya memecahkan pembagi dengan garis horizontal dan teks di tengah:

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

Dan gaya untuk ini:

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

Buat saja komponen View yang memiliki tinggi kecil.

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

0

Jika Anda memiliki latar belakang yang solid (seperti putih), ini bisa menjadi solusi Anda:

<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',
  },
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.