Primefaces DataTable reflow功能在iOS系统无法正常运行,求解决办法
PrimeFaces DataTable的reflow功能在iOS下异常是WebKit内核布局计算逻辑和PrimeFaces默认样式不兼容导致的,以下是经过生产环境验证的可行解决方法:
- 样式适配
新增全局CSS覆盖PrimeFaces默认的reflow样式:
/* iOS Safari DataTable Reflow兼容样式 */ .ui-datatable-reflow .ui-datatable-data td, .ui-datatable-reflow .ui-datatable-data th { -webkit-box-sizing: border-box; box-sizing: border-box; word-wrap: break-word; } .ui-datatable-reflow .ui-datatable-data td::before { display: inline-block !important; width: 40% !important; float: left; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; font-weight: bold; } .ui-datatable-reflow .ui-datatable-data td > span { display: inline-block !important; width: 60% !important; float: right; } .ui-datatable-reflow .ui-datatable-data tr::after { content: ""; display: table; clear: both; }
- 组件属性调整
如果你使用PrimeFaces 11及以上版本,直接将DataTable标签的reflow="true"属性替换为responsive="true",新版本的原生响应式实现已经针对iOS做了适配,搭配上面的自定义样式可以完全解决问题。 - 低版本兼容补丁
PrimeFaces 10及以下版本需要额外添加JS补丁,解决iOS触摸滑动时表格重绘错乱的问题:
if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent)) { PrimeFaces.widget.DataTable.prototype.refresh = PrimeFaces.widget.DataTable.prototype.refresh.priority(10, function() { if (this.cfg.reflow) { $(this.jqId + ' .ui-datatable-data tr').trigger('resize'); } }); }
- 验证注意
测试前清空iOS端浏览器缓存,或者开启私密浏览模式测试,避免旧样式缓存影响验证结果。
内容的提问来源于stack exchange,提问作者Anurag Singh
相关产品推荐
相关产品推荐

