欢迎光临,了解微信小程序开发,就上易用通!

微信小程序 view的文本不能自动换行问题

发布:2018-04-17 12:11浏览: 来源:网络 作者:cola

作者:电鳗效应,来自原文地址 

今天碰到了个问题,view并不能让文本自动换行 
看看官方定义的view组件,原本的view定义的display为block。 
之前忘了在哪里看到小程序布局的时候用flex,所以涉及到了CSS3的display:flex。 
具体学习,看阮一峰老师的教程

看这次出现的问题,是文字太长被吃掉了,截图:微信小程序 view的文本不能自动换行问题(图1)

依靠我多年的开发经验,试倒是被我试出来了,整理了一下思路,一般出现滚轴(在图片或者文字片段中)是因为width,display,(height,padding,margin),对于文字片段(这里只针对中文)实在不行就只能强制换行,例如flex-wrap:warp,white-space:pre-wrap。

然后考虑了以下几种方法

  • 首先,width是100%,如果涉及到padding就要注意width和padding-left以及padding-right的加减问题
  • 其次是height,一般除非固定了大小,不然我不会设置height,而是让内容填充起来高度之后,给它加上适当的padding-top和padding-bottom
  • 另外是margin,这里并没有用到就不说了

方法一:放任不管,让view保持原本的display为block(出现滚轴)

如果不去设置view的display,则会出现如图的情况:微信小程序 view的文本不能自动换行问题(图2)

没错又是滚轴,这次不是因为图片(图片出现滚轴的问题请参考这篇文章 scroll-view中,image组件出现滚轴)

方法二:view { display:block },再采取强制换行white-space: pre-wrap;(其实是可以的,看个人的编程习惯)

(强制换行的链接看这个:css强制换行和超出隐藏实现) 
结果成这样了微信小程序 view的文本不能自动换行问题(图3)

当时的表情简直就是, 哪来的这么大的空隙!!调line-height肯定不对,但是pre-wrap里面又没找到padding或者margin之类的东西。

会不会是display的问题,于是有了方法三。

方法三:view { display:flex },再加上css3的flex-wrap:wrap;flex-direction:row;(不起作用)

第一步,先将view的display转为flex; 
第二步,设置view的flex-wrap:wrap; 
中规中矩的写完,然鹅没有什么用。。 

微信小程序 view的文本不能自动换行问题(图4)

会不会是因为还要flex-direction:row;?然鹅加上去还是没用

微信小程序 view的文本不能自动换行问题(图5)

后来找到资料(虽然和这个有点相似但是不一样的问题,资料是这个:微信小程序 scroll-view flex-wrap 失效问题),有人在评论中提到在scroll-view中,display:flex是没有用的,所以就排除display的问题了。 
既然display没问题,就有了方法四。

方法四:view { display:block },再采取强制换行white-space: pre-line;(看个人的编程习惯)

首先得解释,什么是pre-line,参考文档:white-space 
对比一下方法二的white-space:pre-wrap和方法四的white-space:pre-line

white-space取值 描述 图片 new lines
(新的一行)
Spaces and tabs
(空格和tab)
Text wrapping
(文字环绕)
normal Sequences of whitespace are collapsed. Newline characters in the source are handled as other whitespace. Breaks lines as necessary to fill line boxes.

微信小程序 view的文本不能自动换行问题(图6)

Collapse
(奔溃,也就是没有新的一行)
Collapse
(奔溃,也就是没有空格和tab)
Wrap
(环绕)
pre-wrap Sequences of whitespace are preserved. Lines are broken at newline characters, at <br>, and as necessary to fill line boxes.
(保留空白,像<br>标签一样换行,去填充盒子)

微信小程序 view的文本不能自动换行问题(图7)

Preserve
(保存,也就是会有新的一行)
Preserve
(保存,也就是会有空格和tab)
Wrap
(环绕)
pre-line Sequences of whitespace are collapsed. Lines are broken at newline characters, at <br>, and as necessary to fill line boxes.
(不保留空白,像<br>标签一样换行,去填充盒子)

微信小程序 view的文本不能自动换行问题(图8)

Preserve
(保存,也就是会有新的一行)
Collapse
(奔溃,也就是没有空格和tab)
Wrap
(环绕)

对比方法二和方法四,说是编程习惯的问题,如图 

微信小程序 view的文本不能自动换行问题(图9)

标签和文字之间换行: 

微信小程序 view的文本不能自动换行问题(图10)

标签和文字之间不换行: 

微信小程序 view的文本不能自动换行问题(图11)

所以方法二使用pre-wrap之所以会出现那么大的一片空白,就是因为它保留空白和tab。但是方法四pre-line就会去除空白和tab。

对于个人的编程习惯,因为文字不确定多少的问题,我是标签中间加文字,同时会换行,所以我这里使用的是方法四的white-space:pre-line; 

微信小程序 view的文本不能自动换行问题(图12)

接下来为了美观,就是调一下line-height和padding的问题了。最后效果: 

微信小程序 view的文本不能自动换行问题(图13)

结论就是,scroll-view中,设置display:flex是没不起作用的

中文文字片段在view中不能换行的问题,要使用强制换行,至于是使用white-space:pre-line(不会保留空白和tabs),还是white-space:pre-wrap(会保留空白和tabs),就要看个人的编程习惯了


 
 
 




免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。