小程序模板网

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

发布时间:2018-04-17 12:11 所属栏目:小程序开发教程
作者:电鳗效应,来自原文地址 

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

看这次出现的问题,是文字太长被吃掉了,截图:

依靠我多年的开发经验,试倒是被我试出来了,整理了一下思路,一般出现滚轴(在图片或者文字片段中)是因为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,则会出现如图的情况:

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

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

(强制换行的链接看这个:css强制换行和超出隐藏实现) 
结果成这样了

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

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

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

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

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

后来找到资料(虽然和这个有点相似但是不一样的问题,资料是这个:微信小程序 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.

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>标签一样换行,去填充盒子)

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>标签一样换行,去填充盒子)

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

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

标签和文字之间换行: 

标签和文字之间不换行: 

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

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

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

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

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


 
 
 


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/23583.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询