Vẽ quy tắc ngang trong React Native


96

Tôi đã thử gói react-native-hr - không hoạt động với tôi cũng như trên Android cũng như trên iOS.

Mã sau cũng không phù hợp vì nó hiển thị ba dấu chấm ở cuối

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

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

Câu trả lời:


294

Bạn chỉ có thể sử dụng Chế độ xem trống với đường viền dưới cùng.

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

49
Tôi khuyên bạn nên borderBottomWidth: StyleSheet.hairlineWidth:)
Ryan Pergent,

16
nếu nó không hoạt động, hãy xem xét thêm alignSelf: 'Stretch'.
Nhà khoa học

1
bạn nên chỉ định giá trị WIDTH cho chế độ xem.
Mohamed Ben Hartouz

bằng cách này có thể vẽ đường nhưng bên trái và bên phải có một lề. Tôi muốn vẽ từ đầu đến cuối
Abhi

@Abhi Đó có vẻ như là một vấn đề không liên quan đến câu trả lời này. Hãy tạo ra một câu hỏi mới nếu bạn không tìm thấy một giải pháp
Antoine Grandchamp

22

Người ta có thể sử dụng lề để thay đổi độ rộng của một dòng và đặt nó ở giữa.

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

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

nếu bạn muốn cung cấp ký quỹ động thì bạn có thể sử dụng Chiều rộng thứ nguyên.


Cảm ơn. Bạn cũng có thể chỉ <View style = {styles.lineStyle} />vì không có gì ở giữa ;-)
Martin Nordström

Smit styles.lineStylesẽ tương ứng với một const styles = StyleSheet.create({ lineStyle: ... });ở đây. Bạn chỉ có lineStyle = { ...}mà sẽ gây ra một vấn đề. Một giải pháp hoàn chỉnh với styles.lineStylecó thể được const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
kevr 25/09/18

vâng. bạn đúng. ở đây tôi giả sử rằng bạn đặt lineStylebên trong StyleSheet của mình.
Gửi

12

Gần đây tôi đã có vấn đề này.

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

với kết quả này:

Hình ảnh


25
Điều này không mở rộng quy mô tốt
Petrus Theron

đơn giản vậy thôi.
Siraj Alam

@PetrusTheron tại sao nó không mở rộng quy mô tốt?
Nate Glenn

Dấu gạch ngang @NateGlenn sẽ bao phủ trên màn hình hẹp hoặc xuất hiện quá mỏng trên màn hình rộng hơn.
Petrus Theron

Ah, có lý. Tôi nghĩ rằng giải pháp là tốt nếu bạn chỉ cần một dòng rất ngắn.
Nate Glenn

9

Tôi đã làm nó như thế này. Hi vọng điêu nay co ich

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

cho phong cách:

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

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

Tôi nghĩ đó là giải pháp tốt nhất. Tốt hơn là sử dụng đường viền như các câu trả lời khác.
Erick M. Sprengel

Độ rộng mã cứng có thể là một chút vấn đề.
Godfrey

9

Tôi đã có thể vẽ một dấu phân cách với flexboxcác thuộc tính ngay cả với một văn bản ở giữa dòng.

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

nhập mô tả hình ảnh ở đây


1
Đây là câu trả lời hay nhất, nó chia tỷ lệ và nếu bạn không đặt Độ rộng văn bản, nó sẽ động
newoda

5

Bạn cũng có thể thử react-native-hr-component

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

Ma cua ban:

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

//..

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

4
Đó là một chút quá mức cần thiết
dẫn vào

3

Đây là mã trong React Native (JSX), được cập nhật cho đến hôm nay:

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

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

bạn có thể sử dụng một trong hai alignSelf:'stretch'hoặc width: "100%"cả hai đều hoạt động ... và,

borderBottomWidth: StyleSheet.hairlineWidth

đây StyleSheet.hairlineWidthlà mỏng nhất, sau đó,

borderBottomWidth: 1,

và như vậy để tăng độ dày của đường.


3

Tạo một Linethành phần có thể sử dụng lại phù hợp với tôi:

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

Bây giờ, Nhập và sử dụng ở Linemọi nơi:

<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

Bạn có thể sử dụng bộ chia phần tử gốc.

Cài đặt nó với:

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

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

Sau đó đi với:

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

Nguồn


2
Cài đặt toàn bộ một gói (và có thể là một gói lớn) có vẻ như quá mức cần thiết nếu bạn chỉ cần một đường ngang.
Sandy

Được cho là quá mức cần thiết nếu bạn chỉ sử dụng <Divider /> thành phần, tuy nhiên, bạn nên sử dụng thư viện theo cách nào đó để tiết kiệm thời gian trong việc tạo kiểu các nút đơn giản, Thanh tìm kiếm, v.v. react-native-elements.github.io/react-native-elements
jso1919

1

Tại sao bạn không làm điều gì đó như thế này?

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

Mã của nó rất rõ ràng cho những người làm thế nào có loại vấn đề này, vì vậy nếu tôi có thể giải thích thêm, tôi sẽ làm điều đó.
Mohamed Ben Hartouz

0

Đây là cách tôi giải quyết dải phân cách với các đường ngang và văn bản trong thanh giữa:

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

Và phong cách cho điều này:

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

Nếu bạn có nền rắn (như màu trắng), đây có thể là giải pháp của bạn:

<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',
  },
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.