Ios UIImageView未正确更新边界

Ios UIImageView未正确更新边界,ios,objective-c,Ios,Objective C,我目前正在尝试使用放置在.xib文件中的UIImageView表示的HP仪表来编程一个游戏。我宣布我的出口如下: @property (weak, nonatomic) IBOutlet UIImageView *hpGaugeView; 并据此进行了合成。它还链接到xib中的UIImageView实例 在xib中,我将hpGaugeView的长度设置为188,高度设置为9 下面是我在viewDidLoad中所做的: - (void)viewDidLoad { [super viewD

我目前正在尝试使用放置在.xib文件中的UIImageView表示的HP仪表来编程一个游戏。我宣布我的出口如下:

@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:在其他ViewController中工作得很好,所以我只是想知道这里发生了什么

这是一个小但关键的问题,连续几个小时困扰着我

编辑:
当我关闭“自动布局”时,调整大小工作正常;但是,它会产生一系列其他问题…

我认为问题在于您没有更改
UIImageView
的框架。边界是指视图在其自身坐标系中的位置和大小,而框架是指视图在其superview坐标系中的位置和大小。
如果
clipsToBounds
属性设置为yo YES,则视图框架之外的内容将不可见。

我认为问题在于您没有更改
UIImageView
的框架。边界是指视图在其自身坐标系中的位置和大小,而框架是指视图在其superview坐标系中的位置和大小。
如果
clipstobunds
属性设置为是,然后,视图框架之外的任何内容都将不可见。

结果是nib和代码之间存在一些奇怪的交互…当我以编程方式创建UIImageView时,它工作得很好。

结果是,当我以编程方式创建UIImageView时,nib和代码之间存在一些奇怪的交互工作正常。

在启用自动布局的情况下,在viewDidLoad期间未放置子视图。稍后将计算约束,您可以替代该方法来设置帧:

- (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

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


启用“自动布局”时,在viewDidLoad期间未放置子视图。稍后将计算约束,您可以替代该方法来设置帧:

- (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

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


AutoLayout属性仅适用于IOS 6.0以上版本。将控件拖动到XIB而不是通过代码创建UIImageView,并添加到当前视图。我已经给出了以编程方式添加UIImageView的代码

源代码:


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

AutoLayout属性仅适用于IOS 6.0以上版本。将控件拖动到XIB而不是通过代码创建UIImageView,并添加到当前视图。我已经给出了以编程方式添加UIImageView的代码

源代码:


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

是否使用
AutoLayout
?如果是这样的话,
UIImageView
可能会被约束到nib中的固定大小,并且正在重新调整大小到原始大小。这很有效!但是我必须放弃所有的限制…尝试使用autolayout在viewDidLayoutSubviews中设置框架您是否使用了
autolayout
?如果是这样的话,
UIImageView
可能会被约束到nib中的固定大小,并且正在重新调整大小到原始大小。这很有效!但是我必须放弃所有的限制…尝试使用autolayout在viewDidLayoutSubviews中设置框架我也尝试过使用setFrame:但是它仍然不起作用。更新后的代码将是[hpGaugeView setFrame:CGRectMake(49,18,123,9)];但仍然没有显示变化。当我关闭autoLayout时,我可以通过setFrame来解决这个问题。我也尝试过使用setFrame:但仍然不起作用。更新后的代码将是[hpGaugeView setFrame:CGRectMake(49,18,123,9)];但仍然没有显示变化。当我关闭自动布局时,我可以通过setFrame来解决它。