如何在SkyFloatingLabelTextField中实现文本水平及垂直居中对齐
问题原因
你设置的原生contentVerticalAlignment属性不生效,是因为SkyFloatingLabelTextField 为了实现顶部浮动占位符效果,重写了文本绘制的布局逻辑,原生的垂直对齐规则会被组件自身的布局逻辑覆盖,需要用组件自带的专用属性调整。
解决方案
直接使用组件提供的textVerticalOffset属性调整文本垂直位置,你可以根据输入框高度和字体大小动态计算居中需要的偏移量,代码如下:
// 建议在viewDidLayoutSubviews中调用,确保输入框布局已经完成 selectTradeTxt.textVerticalOffset = (selectTradeTxt.bounds.height - selectTradeTxt.font.lineHeight) / 2
如果你的输入框高度是固定值,也可以直接手动设置偏移量,根据实际显示效果微调数值即可,比如:selectTradeTxt.textVerticalOffset = 5
如果需要让未输入状态下的占位符也保持垂直居中,可以额外设置占位符的偏移属性:
// 未激活状态占位符的垂直偏移 selectTradeTxt.placeholderVerticalOffset = (selectTradeTxt.bounds.height - selectTradeTxt.font.lineHeight) / 2 // 激活后顶部浮动标签的垂直偏移,可根据视觉需求自行调整 selectTradeTxt.titleVerticalOffset = 3
额外优化建议
你代码中手动设置rightView frame的代码可以删除,rightView的尺寸会由组件自动计算,手动赋值反而可能导致布局异常。
内容的提问来源于stack exchange,提问作者Pinal
相关产品推荐
相关产品推荐

