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>
permen karet
sumber
<Teks> __________ Level {level} __________ </Text>
Omar bakhsh

Jawaban:

296

Anda cukup menggunakan View kosong dengan batas bawah.

<View
  style={{
    borderBottomColor: 'black',
    borderBottomWidth: 1,
  }}
/>
Antoine Grandchamp
sumber
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.

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

Martin Chinome
sumber
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'
},
sarin upreti
sumber
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

Azhar Zafar
sumber
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} />
mehulmpt
sumber
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.

Sree
sumber
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 />
Mohammad Zaid Pathan
sumber
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>
Filip Ilievski
sumber
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

shanthan
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,
  }}
/>
Viktor Seč
sumber
0

Mungkin Anda harus mencoba menggunakan react-native-hr seperti ini:

<Hr lineColor='#b3b3b3'/>

dokumentasi: https://www.npmjs.com/package/react-native-hr

J Dorrian
sumber
mencari masalah di repo, tampaknya tidak begitu "aktif" dan terbaru dalam hal ketergantungan :(
Made in Moon
0
import {Dimensions} from 'react-native'

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

<View
  style={{
         borderBottomColor: '#1D3E5E',
         borderBottomWidth: 1,
         width : width , 
  }}
/>
Mohamed Ben Hartouz
sumber
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,
  },
})
Laszlo
sumber
0

Buat saja komponen View yang memiliki tinggi kecil.

<View style={{backgroundColor:'black', height:10}}/>
Penjaga Taman
sumber
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',
  },
});
Darius Rainys
sumber