13

我目前遇到一个非常奇怪的问题。我正在使用 iOS 6 和 Xcode 4.5。我有一个带有 aUIViewController和 a的故事板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)];
}
4

5 回答 5

23

使用 XCode 4.5 和 iOS 6 作为部署目标时,我遇到了同样奇怪的问题。我没有使用故事板。我设法通过禁用界面生成器中的“使用自动布局”选项来解决它。(在文件检查器->界面构建器文档中。

希望这可以帮助

于 2012-12-07T10:58:01.083 回答
11

You can change frame of your UIButton by changing layer's frame of UIButton

 [self.button.layer setFrame:] 

import QuartzCore framework in your class header before using this. This will work with auto layout also.

于 2014-10-14T04:27:16.233 回答
8

你可以用这个

[_button setTranslatesAutoresizingMaskIntoConstraints:YES];

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

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

于 2015-08-05T09:33:10.000 回答
6

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

于 2013-03-06T07:17:54.043 回答
1

//从父视图中移除视图

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

//改变UIButton的框架

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

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

[view addSubview:yourButton];
于 2014-09-03T03:48:37.843 回答