详解iOS中UIView的layoutSubviews子视图布局方法使用

详解iOS中UIView的layoutSubviews子视图布局方法使用

本文主要介绍了iOS中UIView的layoutSubviews的布局方法,并给出了一个在iPad水平和垂直切换时layoutSubviews被调用重新布局的例子。有需要的朋友可以参考一下。

概念

UIView中有一个方法layoutSubviews:

复制代码如下:

- (void)布局子视图;//覆盖点。由layoutIfNeeded自动调用。从iOS 6.0开始,当使用基于约束的布局时,基本实现应用基于约束的布局,否则不执行任何操作。

layoutSubviews方法的具体功能

LayoutSubviews是子视图的一种新布局。例如,当我们想要更新子视图的位置时,我们可以调用layoutSubviews方法来重新排列子视图。

默认情况下,LayoutSubviews不做任何事情。使用时,需要在雷子重写。

例子

因为ipad的横屏和竖屏不一样,好的应用横屏和竖屏的页面布局也不一样。那么就需要横竖屏的整体解决方案。我们来看一个不同屏幕布局的界面。

下面两张图是同一界面的横版和竖版截图。可以看到横版和竖版显示的内容是一样的,只是界面布局不同。为了实现上面的布局,我们主要使用UIView中的layoutSubviews方法。当UIView设置为自动适应屏幕时,当用户旋转设备时,将调用layoutSubviews方法。我们只需要重写这个方法,然后判断用户屏幕的方向。只需调整每个空格的位置。

下面是实现上述接口的最简单的原型:

首先我们可以知道左边是图片,右边是图片加文字视图。这里有一个例子,左边是一个视图,右边是一个带有段落的图片。

案件截图如下

右边的文本和绿色部分由一个applet封装。

整个布局就是我在主视图中添加了一个ContentView,在ContentView中添加了一个ArticleView。

ArticleView和ContentView的xib文件都被打开。

在ContentView中重写layoutSubviews方法,然后根据stausbar的方向判断当前视图的横竖屏。特定代码:

复制代码如下:

-(void)布局子视图{

[超级布局子视图];

UIDeviceOrientation interface orientation=[[ui application shared application]status barorientation];

if(interface orientation==uideviceorientation portraitupdatedown | | interface orientation==uideviceorientation portraitupdatedown){

//当翻转到垂直屏幕时

[self setvertical frame];

} else if(interface orientation==uideviceorientationlandscape left | | interface orientation==uideviceorientationlandscape right){

//当翻转到横向时

[self setHorizontalFrame];

}

}

-(void)setVerticalFrame

{

NSLog(@ 竖屏);

[可标题setFrame:CGRectMake(283,0,239,83)];

[left view set frame:CGRectMake(38,102,384,272)];

[right view set frame:CGRectMake(450,102,282,198)];

}

-(void)setHorizontalFrame

{

NSLog(@ 风景);

[可标题setFrame:CGRectMake(183,0,239,83)];

[left view set frame:CGRectMake(168,122,384,272)];

[right view set frame:CGRectMake(650,122,282,198)];

}

在特定屏幕方法中,可以重新设置每个组件的坐标。

接下来,将ArticleView视图添加到ContentView中。

复制代码如下:

-(id)initWithCoder:(ns coder *)ade coder

{

if((self=[super initwithcode:ade coder]){

NSArray * arrayContentView=[[ns bundle main bundle]loadNibNamed:@ article view owner:self options:nil];

right view=[arrayContentView object atindex:0];

【自行添加子视图:right view】;

}

回归自我;

}

由于我使用的是xib,所以初始化方法是initWithCoder,并为此添加了一个新视图。

同样,在ArticleView中设置屏幕对应空间的坐标。

复制代码如下:

-(void)布局子视图{

[超级布局子视图];

UIDeviceOrientation interface orientation=[[ui application shared application]status barorientation];

CGRect rect=self.frame

rect . size . width=282;

rect . size . height=198;

[self set frame:rect];

如果(接口方向==uildevieworientportrait interfaces ignition==uildevieworientportrailpage down){ .

赵一郎道

[自订垂直框架];

}else if(界面方向==uildorientationlandscape interfacial orientation==uildorientlandscape){ .

陆伯麟儿

[自订水平框架];

}表示

}表示

(void)setVerticalFrame

-好的

nslog(@ @ ##):

[内容视图设置框架:CG矩形制作(12、6、250、125)]:

[文本标签集框架:CG rect maker(50、139、182、39)];

}表示

(无效)设定水平框架

-好的

nslog(@ #):

[内容视图设置框架:CG矩形制作(12、6、106、158)];

[文本标签集框架:CGRectMake(135、11、147、39)];

}表示

字幕ocr:贾宝玉字幕校对:贾宝玉

布置子列席吴亚玲:

张惠卿,张惠卿,张惠卿布局子考官。宋神宗时,吕惠国的版面检视者?张惠卿、吕惠卿、吕惠卿安排次官检视。

张惠卿布置子视图。(范希阳)

你的名字是。

吴亚玲站在吴亚玲的面前。

唐季龙的卷轴。

春荫屏住了绿筠小姐对云娥的布置子进行了采访。

吴亚玲在查看吴亚玲的布局。

张惠卿,张惠卿。吕惠卿道:

将视图"添加子视图"添加到视图"布局子视图"中。

张惠卿与张惠卿进行版面访谈。吴亚玲,吴亚玲,吴亚玲。

详解iOS中UIView的layoutSubviews子视图布局方法使用