如何为内嵌sap.ui.table.Table的SAPUI5 Dialog设置响应式尺寸
解决Dialog与内部sap.ui.table.Table的多余空白问题
针对Dialog尺寸大于内部sap.ui.table.Table、存在非数据空白的问题,结合动态列的场景,可通过以下步骤解决:
1. 让Table完全自适应内容尺寸
给Table添加width="auto"属性,同时在列工厂中为每列设置宽度自适应,确保Table的尺寸完全匹配内容:
XML片段中修改Table配置
<t:Table id="oInvoiceDetailTable" selectionMode="None" visibleRowCountMode="Auto" rowHeight="50" columnHeaderHeight="Auto" width="auto" <!-- 让Table宽度自适应所有列的总和 --> rows="{ path: 'invoiceDetail>/items' }" columns="{ path: 'invoiceDetail>/catalog', sorter: 'COL_POS', filters: [{ path: 'TECH', operator: 'NE', value1: 'X' }], factory: '.invoice.tableInvoiceDetail' }"/>
列工厂函数中设置列宽度
invoice.tableInvoiceDetail = function(sId, oContext) { const oColumn = new sap.ui.table.Column(sId); // 其他列绑定或配置逻辑... oColumn.setWidth("auto"); // 单列宽度自适应内容 return oColumn; };
2. 优化Dialog的内容贴合配置
保留contentWidth="auto"和contentHeight="auto"的基础上,添加额外配置消除不必要的空白和滚动:
<Dialog title="{main>/textPool/K490}" contentWidth="auto" contentHeight="auto" horizontalScrolling="false" <!-- 禁用不必要的横向滚动 --> class="tightDialog"> <!-- 自定义类用于调整内边距 --> <!-- 内容和按钮配置不变 --> </Dialog>
可选:去除Dialog内容区域默认内边距
如果空白来自Dialog内容区域的默认内边距,添加自定义CSS:
.tightDialog .sapMDialogContent { padding: 0; }
3. 动态列更新后强制刷新Dialog尺寸
由于列是动态生成的,需在列加载完成后触发Dialog重新计算尺寸,确保贴合最新的Table大小:
// 在片段对应的控制器中添加监听逻辑 onAfterRendering: function() { const oTable = this.byId("oInvoiceDetailTable"); const oDialog = this.getView().byId("yourDialogId"); // 替换为你的Dialog实际ID // 监听列变化事件 oTable.attachColumnsChanged(() => { // 延迟执行确保DOM已更新 setTimeout(() => oDialog.updateContentSize(), 0); }); }
通过以上设置,Dialog会完全贴合Table的实际内容尺寸,动态适配列数变化,彻底消除多余空白区域。
内容的提问来源于stack exchange,提问作者Heinner Mayorga
相关产品推荐
相关产品推荐

