我有一个自定义uiview,我正在尝试更新帧大小。点击后,我会在方法中这样做。调用该方法,帧值发生变化,但屏幕上没有任何反应!
if (!touched) {
GameBox *box = (GameBox *)[self.view viewWithTag:40];
[box setFrame:CGRectMake(20, 20, 100, 73)];
NSLog(@"%f", box.frame.origin.x);
markButton.enabled = NO;
guessButton.enabled = NO;
[self.view reloadInputViews];
NSLog(@"The action bar should now be hidden");
}
else if (touched) {
guessButton.enabled = YES;
markButton.enabled = YES;
[self.view reloadInputViews];
NSLog(@"The action bar should now be visible");
}
答案 0 :(得分:14)
我猜你已经在Interface Builder
中将自我视图挂钩到了UIView。
要更改UIView框架,请在Interface Builder
转到File Inspector
,然后取消选中Use Autolayout
,然后在代码中更改框架。
希望这有帮助。
答案 1 :(得分:11)
您需要在viewDidAppear(而不是viewDidLoad)中设置调整帧。
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
CGRect frame = self.tableView.frame;
frame.origin.y += 100.0;
frame.size.height -= 100.0;
self.tableView.frame = frame;
}
显然这与导航控制器中的表视图有关。
答案 2 :(得分:4)
这是因为自动布局,但是您可以在自动布局完成其工作或更改其约束后执行此操作。如果您想在自动布局后添加以下内容。
- (void)viewDidAppear:(BOOL)animated {
dispatch_async(dispatch_get_main_queue(), ^{
box.frame = CGRectMake(20, 20, 100, 73)];
});
答案 3 :(得分:-1)
[self.view reloadInputViews]
通常用于FirstResponders。我对您的自定义视图没有太多了解,但我认为只需设置您可以使用的框架:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelay:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
viewFrame.frame=frame;//Frame Defined by you
[UIView commitAnimations];
如果我查看您的自定义视图,可以提供更好的解决方案。