我目前陷入了一个非常奇怪的问题。我使用的是iOS 6和Xcode 4.5。我的故事板中包含UIViewController
和UIButton
。我为.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)];
}
答案 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];