Невозможно изменить размер изображения SVG в приложении React Native - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть следующий React Native проект:

https://snack.expo.io/BkBU8fAlV

, где у меня есть следующий код:

import * as React from 'react';
import { Text, View, StyleSheet } from 'react-native';
import { Constants } from 'expo';

// You can import from local files
import AssetExample from './components/AssetExample';

// or any pure javascript modules available in npm
import { Card } from 'react-native-paper';

import HomerSvg from './assets/HomerSvg';

export default class App extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.paragraph}>
          Change code in the editor and watch it change on your phone! Save to get a shareable url.
        </Text>
        <View style={{ width: 80, height: 80 }}>
          <HomerSvg />
        </View>
        <Card>
          <AssetExample />
        </Card>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
    padding: 8,
  },
  paragraph: {
    margin: 24,
    fontSize: 18,
    fontWeight: 'bold',
    textAlign: 'center',
  },
});

Я отображаю изображение SVGчерез компонент: HomerSvg, который использует пакет react-native-svg.

Мне нужно как-то изменить размер изображения SVG.В приведенном выше коде я попытался безуспешно.

Я попытался, предоставив контейнеру некоторую ширину и высоту, но безуспешно.

У вас есть идеи, как мне этого добиться??

Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Вы можете обернуть все элементы <Path /> в <G /> и масштабировать компонент <G />, рассчитав коэффициент масштабирования, используя Dimensions, то есть ширину и высоту устройства.

<G transform="scale(scaleFactor) translate(offsetX,offsetY)>
<Path/>
<Path/>
.
.
.
<G/>

где scaleFactor, offsetX и offsetY могут быть рассчитаны через const { height, width } = Dimensions.get("window")

0 голосов
/ 03 августа 2019

Это на самом деле очень легко решить без React Native, но с самим SVG.

Просто установите тег preserveAspectRatio на none.

Пример:

<Svg
  width={this.props.width}
  height={this.heights.h1}
  xmlns="http://www.w3.org/2000/svg" 
  viewBox="0 0 750 352"
  preserveAspectRatio="none">
...
</Svg>
0 голосов
/ 24 декабря 2018

Если размеры SVG не основаны на размерах контейнеров, они не изменятся.Изображения с заданными размерами игнорируют размеры их родителей, и вы устанавливаете размеры в HomerSvg.js

Надеюсь, это поможет!

...