加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 在Storyboard中获取子视图的框架

发布时间:2020-12-15 01:48:45 所属栏目:百科 来源:网络整理
导读:我只想(现在)在视图控制器的实例化中获取子视图的尺寸. [这是一个简单的例子,我可以找到a previous question.我试图弄清楚为什么故事板中的场景的子视图不像我期望的那样表现,也就是说:像XIB一样 – 我只是想得到实际绘制到屏幕之前我的子视图的尺寸] 为了
我只想(现在)在视图控制器的实例化中获取子视图的尺寸.

[这是一个简单的例子,我可以找到a previous question.我试图弄清楚为什么故事板中的场景的子视图不像我期望的那样表现,也就是说:像XIB一样 – 我只是想得到实际绘制到屏幕之前我的子视图的尺寸]

为了将问题压缩到一个新的,干净的项目,我这样做:

>选中“使用Storyboard”创建一个新的单一视图项目
>将单个UIView添加到默认的现有MainStoryboard_iPad.storyboard(并将其背景更改为绿色以使其更容易看到 – 除了缩小尺寸之外,这是我从默认的UIView中拖动到场景中的唯一更改)
>选项 – 单击导航器中的ViewController.h文件,将其放在Storyboard框架下面的自己的框架中,并在@interface指令下面插入一对括号
>从Storyboard中的UIView控制点击并拖动到ViewController.h并告诉它将插座命名为firstViewFirstSubView

所以我们现在有了ViewController.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    IBOutlet UIView *firstViewFirstSubView;
}
@end

然后,我将此方法添加到ViewController.m:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSLog(@"View Controller will appear. firstViewFirstSubView: %@ ",firstViewFirstSubView);
    NSLog(@"subView's dimmensions: %f by %f at %f,%f",firstViewFirstSubView.frame.size.width,firstViewFirstSubView.frame.size.height,firstViewFirstSubView.frame.origin.x,firstViewFirstSubView.frame.origin.y);
}

此时,我希望能够获得UIView子视图的维度.不过我得到全0:

2012-11-15 15:21:00.743 StoryboardViewBounds[11132:c07] View Controller will appear. firstViewFirstSubView: <UIView: 0x9379730; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x9378e40>> 
2012-11-15 15:21:00.744 StoryboardViewBounds[11132:c07] subView's dimmensions: 0.000000 by 0.000000 at 0.000000,0.000000

我究竟做错了什么?看起来这应该是非常简单的,所以我认为我必须遗漏一些简单的东西,无论是在Storyboard编辑器中抛出正确的开关还是实现Storyboard需要的方法.

解决方法

在调用layoutSubviews时计算并设置这些维度,这发生在viewWillAppear之后.在UIVIew上调用layoutSubviews后,您可以获取尺寸.

看看在视图控制器中实现此方法:viewDidLayoutSubviews.此时,您应该能够获得子视图的尺寸.请注意,此调用从iOS 5.0开始可用,但由于您参考故事板,我认为您无论如何都在或高于此工作.

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    NSLog(@"View Controller did layout subviews. firstViewFirstSubView: %@ ",firstViewFirstSubView.frame.origin.y);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读