UIImageView无法正确更新边界

时间:2013-06-05 18:03:05

标签: ios objective-c

我目前正在尝试使用放置在.xib文件上的UIImageView表示的HP规格来编写游戏。我宣布我的IBOutlet如下:

@property (weak, nonatomic) IBOutlet UIImageView *hpGaugeView;

并相应地合成。它还链接到xib中的UIImageView实例。

在xib中,我将hpGaugeView的长度设置为188,将高度设置为9.

现在这就是我在viewDidLoad中所做的:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)];
    NSLog(@"%f, %f", [hpGaugeView frame].size.width, [hpGaugeView frame].size.height);
}

尽管NSLog告诉我hpGaugeView的宽度是123,但是当我运行它时,长度与xib中的长度相比没有变化。所有其他setFrame:或setBound:在其他viewControllers中工作正常,所以我只是想知道这里发生了什么。

这是一个小而重要的问题,让我连续几个小时烦恼......

编辑: 当我关闭AutoLayout时,调整大小工作;它虽然创造了许多其他问题......

4 个答案:

答案 0 :(得分:3)

启用自动布局后,在viewDidLoad期间尚未放置子视图。稍后计算约束,您可以覆盖viewDidLayoutSubviews方法来设置框架:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    // Do any additional setup after subviews are laid.
    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)];
    NSLog(@"%f, %f", [hpGaugeView frame].size.width, [hpGaugeView frame].size.height);
}

从课程参考:

  

<强> viewDidLayoutSubviews

     

通知视图控制器其视图刚刚布置了其子视图。

答案 1 :(得分:0)

我认为问题在于你没有改变UIImageView的框架。边界指的是视图在其自身坐标系中的位置和大小,而边框指的是其超视图坐标系中的位置和大小。 如果clipsToBounds属性设置为是,则视图框外的任何内容都不会显示。

答案 2 :(得分:0)

事实证明,这是笔尖和代码之间奇怪的奇怪交互......当我以编程方式创建UIImageView时,它运行正常。

答案 3 :(得分:0)

AutoLayout属性仅在IOS 6.0之上有效。将控件拖动到XIB而不是您可以通过代码创建 UIImageView 并添加到当前视图。我已经给出了以编程方式添加UIImageView的代码。

源代码:

// .h file
@property (weak, nonatomic) UIImageView *hpGaugeView;

//.m file
- (void)viewDidLoad
{
    [super viewDidLoad];

    hpGaugeView = [[UIImageView alloc] init];

    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)];

    [self.view addSubview:hpGaugeView];

}

通过编程方式初始化并将hpGaugeView添加到viewDidLoad函数内的子视图中。