React Native'de yatay cetvel çizin


97

React-native-hr paketini denedim - benim için ne Android'de ne de iOS'ta çalışmıyor.

Sonunda üç nokta oluşturduğu için aşağıdaki kod da uygun değildir

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

<Metin> __________ Seviye {seviye} __________ </Text>
Omar bakhsh

Yanıtlar:


295

Alt kenarı olan boş bir Görünüm kullanabilirsiniz.

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

49
Tavsiye ederim borderBottomWidth: StyleSheet.hairlineWidth:)
Ryan Pergent

16
işe yaramazsa, alignSelf: 'stretch' eklemeyi düşünün.
Scientist1642

1
görünüm için WIDTH değerini belirtmelisiniz.
Mohamed Ben Hartouz

bu sayede çizgi çekebiliyor ama solda ve sağda bir kenar boşluğu var.
Baştan

@Abhi Bu yanıtla ilgisi olmayan bir konu gibi görünüyor. Bir çözüm bulamazsanız lütfen yeni bir soru oluşturun
Antoine Grandchamp

22

Bir çizginin genişliğini değiştirmek ve ortaya yerleştirmek için kenar boşluğu kullanılabilir.

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

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

Dinamik olarak marj vermek istiyorsanız Boyut genişliğini kullanabilirsiniz.


Teşekkürler. Yapabilirsin Ayrıca sadece <View style = {styles.lineStyle} />hiçbir şey ;-) arasında olduğu
Martin Nordström

Smit burada a'ya styles.lineStylekarşılık gelir const styles = StyleSheet.create({ lineStyle: ... });. Sadece lineStyle = { ...}bir soruna neden olacak olana sahipsin . İle tam bir çözüm styles.lineStyleolabilir const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
kevr

Evet. haklısın. burada lineStyleStil Sayfanızın içine koyduğunuzu varsayıyorum .
Smit

12

Son zamanlarda bu problemi yaşadım.

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

bu sonuçla:

Resim


25
Bu pek de ölçeklenmiyor
Petrus Theron

kadar basit.
Siraj Alam

@PetrusTheron neden iyi ölçeklenmiyor?
Nate Glenn

@NateGlenn kısa çizgileri dar bir ekranda kaydırılır veya daha geniş bir ekranda çok ince görünür.
Petrus Theron

Ah, bu mantıklı. Sadece çok kısa bir hatta ihtiyacınız varsa çözümün iyi olduğunu düşünüyorum.
Nate Glenn

9

Ben böyle yaptım. Bu yardımcı olur umarım

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

stil için:

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

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

Bence en iyi çözüm bu. Diğer cevaplar gibi sınır kullanmaktan daha iyidir.
Erick M. Sprengel

Sabit kodlama genişliği biraz sorun olabilir.
Godfrey

9

flexboxÇizginin ortasındaki bir metinle bile özelliklere sahip bir ayırıcı çizebildim .

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

görüntü açıklamasını buraya girin


1
Bu en iyi yanıt, ölçeklenir ve bir Metin genişliği ayarlamazsanız dinamik olur
newoda

5

Ayrıca deneyebilirsin react-native-hr-component

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

Senin kodun:

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

//..

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

4
Bu biraz abartma
Led

3

Bu, bugün güncellenen React Native (JSX) kodundadır:

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

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

bunlardan birini alignSelf:'stretch'veya width: "100%"her ikisini birden kullanabilirsiniz ... ve

borderBottomWidth: StyleSheet.hairlineWidth

işte StyleSheet.hairlineWidthen ince, o zaman

borderBottomWidth: 1,

ve benzeri hat kalınlığını artırmak için.


3

Yeniden kullanılabilir bir Linebileşen oluşturmak benim için çalıştı:

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

Şimdi, Lineher yerde içe aktarın ve kullanın :

<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

Yerel öğe bölücüyü kullanabilirsiniz.

Şununla kurun:

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

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

O halde şununla gidin:

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

Kaynak


2
Yalnızca yatay bir çizgiye ihtiyacınız varsa, bütün bir paketi (ve büyük olasılıkla büyük bir paketi) yüklemek, aşırı bir şey gibi görünür.
Sandy

Sadece <Divider /> bileşeni kullanacaksanız, bunun aşırı olduğu kabul edilir , ancak basit düğmeler, Arama Çubukları vb. Stillerde zamandan kazanmak için bir kitaplık kullanmalısınız ... Uygulamanız için yapabileceği her şeyi kontrol edin react-native-elements.github.io/react-native-elements
jso1919

1

Neden böyle bir şey yapmıyorsun?

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

Kod, bu tür bir sorunu olanlar için çok açık, bu yüzden daha fazla açıklayabilirsem, yapacağım.
Mohamed Ben Hartouz

0

Bölücüyü orta kısımdaki yatay çizgiler ve metinle böyle çözdüm:

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

Ve bunun için stiller:

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

Sadece yüksekliği küçük olan bir View bileşeni oluşturun.

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

0

Sağlam bir arka planınız varsa (beyaz gibi), bu sizin çözümünüz olabilir:

<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',
  },
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.