iOS无法更改UIButton的框架

时间:2012-10-07 15:01:47

标签: ios uibutton storyboard

我目前陷入了一个非常奇怪的问题。我使用的是iOS 6和Xcode 4.5。我的故事板中包含UIViewControllerUIButton。我为.h文件做了一个弱UIButton插座。

在.m文件中我想更改按钮的框架但没有任何反应。然而,我创建了一个UIImageView并以与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)];
}

5 个答案:

答案 0 :(得分:23)

我使用XCode 4.5和iOS 6作为部署目标时遇到了同样的奇怪问题。我不是在使用故事板。 我设法通过在Interface Builder中禁用“使用Autolayout”选项来解决它。 (在文件检查器 - &gt;接口构建器文档中。

希望这有帮助

答案 1 :(得分:11)

您可以通过更改UIButton的图层框架来更改UIButton的框架

 [self.button.layer setFrame:] 

在使用它之前在类头中导入QuartzCore框架。 这也适用于自动布局。

答案 2 :(得分:7)

您可以使用此

[_button setTranslatesAutoresizingMaskIntoConstraints:YES];

此后,您可以设置按钮的框架。

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

答案 3 :(得分:6)

从超视图中删除视图,设置框后再次将此视图添加为子视图。希望这会很好......

答案 4 :(得分:1)

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

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

//更改UIButton的框架

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

//再次将此视图添加为子视图

[view addSubview:yourButton];