Ios UIImageView未正确更新边界
我目前正在尝试使用放置在.xib文件中的UIImageView表示的HP仪表来编程一个游戏。我宣布我的出口如下: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
@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来解决它。