iOS不能更改UIButton的框架

我目前卡住了一个非常奇怪的问题。 我正在使用iOS 6和Xcode 4.5。 我有一个UIViewController和一个UIButton的故事板。 我对我的.h文件做了一个弱的UIButtonsockets。

在.m文件中,我想更改button的框架,但没有任何反应。 然而,我有一个UIImageView创build和连接相同的方式作为UIButton但我可以改变UIImageView的帧没有任何问题。

当我这样做:

 NSLog(@"%@", button) 

我得到这个输出:

 <UIButton: 0xa185a40; frame = (191 330; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xa185640>> 

这些是我的代码的相关部分:

 -(void)viewDidLayoutSubviews{ [self addStampGrid]; } -(void)addStampGrid { // ... [_button setFrame:CGRectMake(10,10,10,10)]; } 

我使用XCode 4.5和iOS 6作为部署目标有同样奇怪的问题。 我虽然不使用故事板。 我设法通过在Interface Builder中禁用选项“Use Autolayout”来解决这个问题。 (在文件检查器 – > Interface Builder文件中。

希望这可以帮助

你可以通过改变UIButton的图层框架来改变你的UIButton的框架

  [self.button.layer setFrame:] 

在使用此类之前,在类头中导入QuartzCore框架。 这也将与自动布局一起工作。

你可以使用这个

 [_button setTranslatesAutoresizingMaskIntoConstraints:YES]; 

之后你可以设置你的button的框架。

它可能会在日志中提供一些有关约束的警告,因为此属性会覆盖您在自动布局中给出的约束。

从超级视图中删除视图,并在设置框架之后再次将此视图作为子视图。 希望这会工作正常…

//从超级视图中移除视图

 UIView *view = yourButton.superview; [yourButton removeFromSuperview]; 

//改变UIButton的框架

 CGRect bounds = view.bounds; yourButton.center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds)); 

//再次添加这个视图作为子视图

 [view addSubview:yourButton];