问题是Toolbar https://material-ui-next.com/api/toolbar/响应地改变它的高度和Tabs https://material-ui-next.com/api/tabs/ and Tab https://material-ui-next.com/api/tab/组件不(选项卡设置min-height
其 48pxroot
类,Tab 设置其高度root
class).
幸运的是,行为Toolbar
use 在主题 mixin 中可用,因此您可以创建也使用此逻辑的类:
const styles = theme => ({
fullHeight: {
...theme.mixins.toolbar,
},
});
这将创建一个具有与中使用的相同的响应高度逻辑的类Toolbar
成分。使用与样式 https://material-ui-next.com/guides/typescript/#usage-of-withstyles,您可以使您的组件可以访问此类:
import { withStyles } from "material-ui/styles";
// ...
export default withStyles(styles)(Header);
这将添加一个classes
prop,它是一个对象,其中包含提供给对象中定义的每个类的字符串属性withStyles
。您可以将其应用到Tabs
组件和每个Tab
组件由压倒他们的root classes https://material-ui-next.com/customization/overrides/#overriding-with-classes以确保他们填满AppBar
:
render() {
const { classes } = this.props;
return (
<AppBar>
<Toolbar>
<Grid container alignItems="center" justify="space-between">
<Grid item>
<Typography color="inherit" variant="title">
BackTube
</Typography>
</Grid>
<Grid item>
<Tabs classes={{ root: classes.fullHeight }} onChange={this.changeTab} value={this.state.currentTab}>
<Tab classes={{ root: classes.fullHeight }} icon={<Magnify />} value="search" />
<Tab classes={{ root: classes.fullHeight }} icon={<FormatListBulleted />} value="lists" />
<Tab classes={{ root: classes.fullHeight }} icon={<Settings />} value="settings" />
</Tabs>
</Grid>
</Grid>
</Toolbar>
</AppBar>
);
请注意,上述解决方案是为 MUI v1 beta 编写的。
更新 5/2022:在 MUI 5 中可以完成同样的事情,这里是代码沙箱 https://codesandbox.io/s/full-height-tabs-demo-for-mui-5-zn5pep