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.