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

在xib或storyboard中,非布局视图rootView加入布局视图myLinearLayout,请问如何使myLinearLayout的宽高占用整个rootView的大小? #36

Closed
HaiyangGuo opened this issue Apr 20, 2017 · 4 comments

Comments

@HaiyangGuo
Copy link

HaiyangGuo commented Apr 20, 2017

在xib或storyboard中,把myLinearLayout的myLeft,myRight,myTop,myBottom 都设置为0尝试无效?

@ghost
Copy link

ghost commented Apr 20, 2017

@HaiyangGuo

这要再次区分一下边距和间距和概念,所谓边距是指子视图距离父视图的距离;而间距则是指子视图距离兄弟视图的距离。myLeft,myRight,myTop,myBottom这几个子视图的扩展属性即可用来表示边距也可以用来表示间距,这个要根据子视图所归属的父布局视图的类型而确定:

1.垂直线性布局MyLinearLayout中的子视图: myLeft,myRight表示边距,而myTop,myBottom则表示间距。
2.水平线性布局MyLinearLayout中的子视图: myLeft,myRight表示间距,而myTop,myBottom则表示边距。
3.表格布局中的子视图: myLeft,myRight,myTop,myBottom的定义和线性布局是一致的。
4.框架布局MyFrameLayout中的子视图: myLeft,myRight,myTop,myBottom都表示边距。
5.相对布局MyRelativeLayout中的子视图: myLeft,myRight,myTop,myBottom都表示边距。
6.流式布局MyFlowLayout中的子视图: myLeft,myRight,myTop,myBottom都表示间距。
7.浮动布局MyFloatLayout中的子视图: myLeft,myRight,myTop,myBottom都表示间距。
8.路径布局MyPathLayout中的子视图: myLeft,myRight,myTop,myBottom即不表示间距也不表示边距,它表示自己中心位置的偏移量。
9.非布局父视图中的布局子视图: myLeft,myRight,myTop,myBottom都表示边距。
10.非布局父视图中的非布局子视图: myLeft,myRight,myTop,myBottom的设置不会起任何作用,因为MyLayout已经无法控制了。

再次强调的是:

  1. 如果同时设置了左右边距就能决定自己的宽度,同时设置左右间距不能决定自己的宽度!
  2. 如果同时设置了上下边距就能决定自己的高度,同时设置上下间距不能决定自己的高度

@ghost
Copy link

ghost commented Apr 20, 2017

@HaiyangGuo
可以使用
myLinearLayout.widthSize.equalTo(rootLayout.widthSize);设置宽度
myLinearLayout.heightSize.equalTo(rootLayout.heightSize);设置高度

@HaiyangGuo HaiyangGuo changed the title 非布局视图rootView加入布局视图myLinearLayout,请问如何使myLinearLayout的宽高占用整个rootView的大小? 在xib或storyboard中,非布局视图rootView加入布局视图myLinearLayout,请问如何使myLinearLayout的宽高占用整个rootView的大小? Apr 20, 2017
@youngsoft
Copy link
Owner

您好!经过测试发现这种问题只会出现在MyLayout和XIB或者SB结合使用时并且是布局视图的父视图是非布局视图时才会出现,出现的原因是通过XIB或者SB加载视图时布局视图先添加到非布局父视图中,这时候那些扩展的布局属性还没有被设置,而现在MyLayout的实现逻辑是当布局视图添加到非布局父视图时进行各种设置,所以会出现这种XIB和MyLayout结合的问题!,这个问题将在下一个版本中进行修复。您目前可以将视图控制器里面的根视图也设置为布局视图就不会出现这个问题。

@youngsoft
Copy link
Owner

您好!您所提出的问题已经在新发布的V1.3.6 版本中已经修复解决。解决的方法是在MyBaseLayout这个基类中增加了awakeFromNib方法的实现,并在awakeFromNib中更新布局约束的设置。因为通过XIB或者SB来建立视图时,系统会优先添加子视图再设置扩展属性。所以我们需要在awakeFromNib中再次更新这些扩展属性的设置。

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

2 participants