我试图将一个react-native-svg
元素放入其中View
,使其以特定的固定纵横比呈现,然后在包含视图的范围内尽可能大地缩放。
Svg
元素 (from )react-native-svg
似乎只接受绝对值width
和height
属性(我尝试使用百分比,但没有渲染,并且调试确认百分比值是NSNull
在它们到达本机视图时)。我不确定如何达到预期的效果。这是我到目前为止所尝试的:
// I have a component defined like this:
export default class MySvgCircle extends React.Component {
render() {
return (
<View style={[this.props.style, {alignItems: 'center', justifyContent: 'center'}]} ref="containingView">
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center', aspectRatio: 1.0}}>
<Svg.Svg width="100" height="100">
<Svg.Circle cx="50" cy="50" r="40" stroke="blue" strokeWidth="1.0" fill="transparent" />
<Svg.Circle cx="50" cy="50" r="37" stroke="red" strokeWidth="6.0" fill="transparent" />
</Svg.Svg>
</View>
</View>
);
}
}
// And then consumed like this:
<MySvgCircle style={{height: 200, width: 200, backgroundColor: "powderblue"}}/>
这就是我在渲染时看到的。
我希望放大红色和蓝色圆圈以填充 200x200 区域(如果包含视图是矩形而不是正方形,则保持圆形),而无需预先知道组件的消费者/用户所需的大小。
如前所述,我尝试使用百分比,如下所示(其余部分相同):
<Svg.Svg width="100%" height="100%">
但是 SVG 部分根本不绘制。像这样:
控制台日志中没有错误消息或其他说明为什么这不起作用。
在 RN 中布局后测量 UI 元素的方法似乎是异步的,这似乎与我正在尝试做的事情不匹配。我可以使用某种缩放或变换魔法吗?
所需的输出将如下所示(通过硬编码值获得):
当包含视图不是一个完美的正方形时,我希望它像这样工作: