我目前正在尝试使用放置在.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时,调整大小工作;它虽然创造了许多其他问题......
答案 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函数内的子视图中。