2012-04-30 96 views
3

我有一个自定义的uiview,我试图更新帧大小。一旦点击它,我会在方法中这样做。该方法被调用,并且帧值发生了变化,但屏幕上没有任何反应!无法更改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

请询问您想do..so我能明白.. – Nit

+0

我想:一)调整uisubview框的CGRect框架,和b)禁用/重新启用猜测按钮和标记按钮 – michaela

回答

-1

[self.view reloadInputViews]通常用于FirstResponders。我没有太多关于你customview的想法,但我认为只是设置,您可以使用框架:

[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]; 

可以提供更好的解决方案,如果我得到一个看看你的自定义视图。

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; 
} 

显然这与导航控制器中的表格视图有关。

+1

它为我工作。 – sivakspt

14

我想你已经迷上了selfview到UIView Interface Builder

为了改变UIView帧,在Interface Builder转到File Inspector,并取消选中Use Autolayout,然后在代码中改变帧。

希望这会有所帮助。

+0

我不敢相信我花了3个小时调试......谢谢! – OMGPOP

+0

谢谢!简单的解决方案,但快速完成工作。 – user3344977

+0

这可行,但它会影响整个文档使用自动布局的能力...... –

4

这是因为自动布局,但是您可以在自动布局完成其工作或更改其约束后执行此操作。如果你想在自动布局后添加以下内容。

- (void)viewDidAppear:(BOOL)animated { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     box.frame = CGRectMake(20, 20, 100, 73)]; 
}); 
+0

它帮助了我,谢谢,但你能告诉我为什么你把它放在dispatch block里面吗@Deniz –

+0

看来,我想在当前重绘周期之后改变帧大小,在viewDidAppear方法完成执行后的一段时间。但我现在还不确定。 – Deniz