Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

框架很强大,但是不习惯。 #34

Closed
jianjianhao opened this issue Apr 5, 2017 · 5 comments
Closed

框架很强大,但是不习惯。 #34

jianjianhao opened this issue Apr 5, 2017 · 5 comments

Comments

@jianjianhao
Copy link

一下子5-6种布局,在做项目的时候也不知道到底要用那个布局才算好,demo测试里面表格布局-水平表格实现瀑布流能否写个scrollerview复用的列子,因为我可能习惯了tableview和collectionview,如果换成这种demo这种方法,不知道怎么写,求大神指导

@youngsoft
Copy link
Owner

很好的问题:

  1. 理论上来说每种界面都可以用所有布局来实现,但在实践中每种布局还是有特有的应用场景:
  • 线性布局MyLinearLayout适合那些从上到下依次排列并且每行只有1个视图或者从左到右依次排列并且每列自由一个视图的场景。线性布局还有一点就是和UIScrollView结合来实现滚动,并成为某个界面的整体根布局视图,线性布局也提供了和tableview一样的能力,但是前者要比后者使用简单得多;

  • 相对布局MyRelativeLayout则是和AutoLayout具有一样的功能,主要适合于那些界面完全不规则排列以及子视图之间的位置需要相互依赖而确定的场景;

  • 框架布局MyFrameLayout其实是相对布局MyRelativeLayout的一个轻量级的子集布局,框架布局里面的子视图只和布局产生关系;

  • 表格布局其实就是一个水平线性布局套多个垂直线性布局或者一个垂直线性布局套多个水平线性布局的实现,因此表格布局可以用来实现那些多行多列排列的场景;

  • 流式布局MyFlowLayout则是一个可以实现多行多列有规律排列的场景,同时他是一个线性布局的超集,而且流式布局可以提供collectionview一样的能力,但是前者使用必要后者简单的很多,流式布局还是flexbox的一个功能子集,如果你熟悉WEB前端的flexbox技术的话就很好了解他了。

  • 浮动布局MyFloat则是适合于那些图文结合,以及内容依次排列自动换行的场景,浮动布局也可以实现一些看似无规律排列但是实际是有规律的不规则界面的场景;

  • 路径布局MyPathLayout则是通过提供一个函数来实现曲线布局的场景,比如圆环、弧形、扇形等等曲线函数的布局方式。

  1. 目前所有的布局的子视图都暂时不支持子视图复用的场景,因此如果是大量的重复数据以及界面时,还是推荐用tableview和collectionview, 但是里面的每个cell还是可以用布局视图去实现。如果你的界面是有限个子视图的话那么你就可以用线性布局和流式布局来代替系统的两种视图。

3.在我的最后的几个DEMO里面有介绍如果用各种布局代替tableview和collectionview的几个例子。

最后您可以加入QQ群:178573773 来一起探讨问题和解决问题。

@bacy
Copy link

bacy commented May 3, 2017

Android转iOS的福音,哈哈

@youngsoft
Copy link
Owner

谢谢您的支持。。

@5nn
Copy link

5nn commented Jun 2, 2017

其实大神只需要告诉我们:
1:单一view里面布局子视图,可以用那种?
2: 固定高度,固定子视图的UITableViewCell可以用那种?如果行数一定,用那种?不定行数用那种?
3: 图文混排的,不定高度UITableViewCell用那种?行数不定(需要缓存高度)?行数固定?
4: 路径视图用那个?

@youngsoft
Copy link
Owner

@5nn

  1. 理论上来说布局就是一个特殊的容器视图,只是每种布局视图里面的子视图的排列有特定的规则。其实每种布局都可以用来实现某个功能,只是体现在代码的多少,以及难易而已。至于哪种布局用那种场景,我在上面已经有了一个大概的说明了。

  2. 固定高度的cell的话用哪种布局也要根据界面UI来选择。如果你的列表就是那么十几行几十行那么就可以考虑不用UITableview了,而是考虑用一个UIScrollView + 线性布局来实现了。 如果是行数太多那么就要考虑复用了,这时候还是推荐用UITableview来实现,然后将布局实现在UITableviewCell中。

  3. 对于图文混排的场景,推荐的是用浮动布局MyFloatLayout因为浮动布局的理念是从CSS中的float属性而来的,而CSS中的float属性主要就用于那些图文混排的场景中;至于不定高度的UITableViewCell的话用哪种布局就看具体的界面UI了。布局视图的wrapContentHeight 属性可以用在任何布局中,而且可以很容易实现不定高度的UITableView上。至于您说的行数问题还是和问题2是一样的如果行数不多不需要考虑复用那么就用UIScrollView加线性布局的模式,如果考虑复用就用UITableView。至于您说的缓存高度的话因为布局系统里面做了一些优化具有一定的缓存高度的能力,因此用MyLayout进行布局的性能还是不错的。当然如果你还需要更加优化和更加流畅的体验效果那么你就需要自己去定制化一些策略了。

4.路径视图,可能就是你说的那些排列可能是在一个圆环上,或者在一个曲线上的界面。这种场景就非常的推荐用路径布局MyPathLayout来实现您的需求。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants