我有一个React-mui draggable dialog组件,我正在使用resizable box:
return (
<StyledDialog
open={open}
classes={{root: classes.dialog, paper: classes.paper}}
PaperComponent={PaperComponent}
aria-labelledby="draggable-dialog"
>
<ResizableBox
height={520}
width={370}
minConstraints={[300, 500]}
maxConstraints={[Infinity, Infinity]}
className={classes.resizable}
>
<DialogContent classes={{root: classes.dialogContent}} id="draggable-dialog">
<IconButton className={classes.clearIcon} aria-label="Clear" onClick={onClose}>
<ClearIcon/>
</IconButton>
<iframe
src={hjelpemiddel.url}
title={hjelpemiddel.navn}
width="100%"
height="100%">
</iframe>
</DialogContent>
</ResizableBox>
</StyledDialog>
);
我想调整对话框内的iframe
沿着ResizableBox
的大小。但是,似乎我只能调整ResizableBox
的宽度,而不是框的高度,至少最大高度似乎是最初设置的高度。我如何修复它,以便我也可以调整高度?
更新
Codesanbox是可用的here。
仅供参考,由于某些原因,有时会出现导入失败消息,但如果您刷新codesandbox的页面,则一切正常。
3条答案
按热度按时间bxjv4tth1#
在CodeSandBox中,根据我的测试,拖动和调整大小的事件同时触发。您可以使用
react-draggable
的cancel
属性,以便在调整大小手柄是正在交互的组件时不会发生拖动。当你这样做时,draggable元素在调整大小时将不再更新它的CSS
transform: translate
属性-为此,你可以选择控制你的Draggable组件的位置。根据需要平移/设置X和Y,以在调整大小时保持其位置。请注意,x
和y
状态和状态设置器应该驻留在这些组件中的公共父/祖先上,您将作为props向下传递。(On我的CodeSandBox,我已经摆脱了最小
height
和width
等约束,以清楚地显示示例)vcudknz32#
你可以绑定窗口调整大小的事件,计算新的高度和宽度,并将其传递给你的
resizable-box
5q4ezhmt3#
显然,
react-resizable
使用内联CSS来处理一个盒子的 width 和 height,对于你的问题,我模拟了这个问题,注意下面来自Google chrome devTools的截图:react-resizable-box
有一个 important 标志,它覆盖了内联高度值,所以在视图中,我有以下行为:你的信息是不够的,所以我不能直接说你的问题的原因或原因,但它是非常可能的CSS覆盖是这个问题的根本原因。
因此,检查项目上的
resizable-box
并寻找CSS覆盖。添加后更新重现问题
实际上,根据我的最后一个答案,现在在复制沙箱中覆盖了你的
height
,我删除了iframe
标签,一切正常,你传递了一个height="100%"
属性给你的iframe
标签,它阻止了高度的变化。此外,您将minConstraints={[300, 500]}
传递给ResizableBox
组件,因此它的高度不能小于500px
。