首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当html字符串已经有宽度时如何设置imagesMaxWidth

当html字符串已经有宽度时如何设置imagesMaxWidth
EN

Stack Overflow用户
提问于 2020-02-19 19:00:15
回答 2查看 754关注 0票数 1

在开发React Native Apps时,我使用react-native-render-html将字符串转换为html元素。我从后台收到了RESTful API发来的字符串,在<img>标签中已经设置了宽和高:

代码语言:javascript
运行
复制
<img class="aligncenter" src="https://www.allfin.com/u/cms/www/201811/13142949sf02.jpg" width="600" height="408" />

但我希望将图像调整到窗口的最大宽度,因此我使用:

代码语言:javascript
运行
复制
imagesMaxWidth={Dimensions.get('window').width}

整个片段如下:

代码语言:javascript
运行
复制
  <ScrollView style={styles.content}>
    <Text style={styles.title}>{this.props.title}</Text>
    <Text>{this.props.date}</Text>
    <HTML
      html={this.props.content}
      imagesMaxWidth={Dimensions.get('window').width - 40}
    />
  </ScrollView>

但是图像不能调整到窗口的最大宽度。

那么我该如何设置它呢?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-02-19 20:46:40

使用ignoredStyles属性忽略原始图片的宽度和高度。使用ignoredStyles={['height', 'width']}解决此问题。

票数 2
EN

Stack Overflow用户

发布于 2020-09-26 19:28:29

在最新的5.0预发布版本中,有了一个更干净的解决方案。使用全新的带有useWindowDimensions钩子的contentWidth道具,图像将自动缩放到内容宽度!

代码语言:javascript
运行
复制
yarn add react-native-render-html@unstable
代码语言:javascript
运行
复制
import * as React from 'react';
import {ScrollView, StyleSheet, useWindowDimensions} from 'react-native';
import HTML from 'react-native-render-html';

const html = `
<img class="aligncenter" src="https://www.allfin.com/u/cms/www/201811/13142949sf02.jpg" width="600" height="408" />
`;

export default function App() {
  const {width} = useWindowDimensions();
  return (
    <ScrollView contentContainerStyle={styles.container}>
      <HTML contentWidth={width} html={html} />
    </ScrollView>
  );
}

const styles = StyleSheet.create({
  container: {
    flexGrow: 1,
  },
});

结果:

此外,如果您想要此行为,并且不希望图像大于300,则可以使用新的computeEmbeddedMaxWidth属性:

代码语言:javascript
运行
复制
import * as React from 'react';
import {ScrollView, StyleSheet, useWindowDimensions} from 'react-native';
import HTML from 'react-native-render-html';

const html = `
<img class="aligncenter" src="https://www.allfin.com/u/cms/www/201811/13142949sf02.jpg" width="600" height="408" />
`;

function computeEmbeddedMaxWidth(contentWidth, tagName) {
  if (tagName === 'img') {
    return Math.min(contentWidth, 300);
  }
  return contentWidth;
}

export default function App() {
  const {width} = useWindowDimensions();
  return (
    <ScrollView contentContainerStyle={styles.container}>
      <HTML
        contentWidth={width}
        computeImagesMaxWidth={computeImagesMaxWidth}
        html={html}
      />
    </ScrollView>
  );
}

const styles = StyleSheet.create({
  container: {
    flexGrow: 1,
  },
});

结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60298837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档