能否将CupertinoPicker中的选项定位在两条分隔线中间?
调整CupertinoPicker选项位置,使其居中于分隔线中间
当然可以解决这个问题!你观察得很仔细——CupertinoPicker的默认选项位置确实会因为文本基线对齐的原因,看起来更靠近上方分隔线。下面给你两种简单有效的解决方法:
方法1:让选项内容垂直居中(最直接)
默认情况下,Text组件是基于文本基线对齐的,并非垂直居中,所以在itemExtent指定的高度里会显得偏上。只需要把每个选项用Center组件包裹,就能让文本正好处于itemExtent的垂直中心,对应到分隔线的中间位置:
CupertinoPicker( itemExtent: 50, onSelectedItemChanged: (int index) { print(index); }, children: <Widget>[ Center(child: Text("Item 1")), // 用Center包裹文本实现垂直居中 Center(child: Text("Item 2")), Center(child: Text("Item 3")), ], )
方法2:自定义选中区域分隔线(更精确控制)
如果需要对分隔线的样式或位置做更精细的调整,可以自定义selectionOverlay属性,自己绘制两条分隔线,再配合居中的文本,完全对齐到中间:
CupertinoPicker( itemExtent: 50, // 自定义选中区域的分隔线,匹配系统默认风格 selectionOverlay: Container( decoration: BoxDecoration( border: Border.symmetric( horizontal: BorderSide( color: CupertinoColors.systemGrey, width: 1.0, ), ), ), ), onSelectedItemChanged: (int index) { print(index); }, children: <Widget>[ Center(child: Text("Item 1")), Center(child: Text("Item 2")), Center(child: Text("Item 3")), ], )
这样修改后,选中的选项就会完美居中在两条分隔线的中间位置啦!
内容的提问来源于stack exchange,提问作者Jonathan Rhein
相关产品推荐
相关产品推荐

