如何以编程方式更改UIView子类中的UIView框架?

时间:2014-09-26 15:28:26

标签: ios objective-c uiview frame

我在界面构建器中有一个UICustomButton(UIButton的子类)。我想在UICustomButton中更改此按钮的框架。

我尝试了以下代码:

// make it 10 points wider and higher
CGRect newFrame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width + 10, self.frame.size.height + 10);
self.frame = newFrame;
awakeFromNib:, drawRect:

中的

它们都没有奏效,结果没有改变。

3 个答案:

答案 0 :(得分:2)

awakeFromNibdrawRect:都不合适。

您可以在layoutSubviews中更改其框架,但如果您的应用使用自动布局,则可能会遇到麻烦。

答案 1 :(得分:2)

不要那样做!这是糟糕的架构!

视图永远不应该改变它自己的框架。它始终是父视图调整其子项的大小。 如果您检测到视图中需要另一个帧:向父视图发送委托调用并更改其中的帧。委托方法可能如下所示

- customButton:(UIButton *)button requestNewFrame:(CGRect)frame
{
    button.frame = newFrame;
    // some storing method so you remember the frame on rotations and stuff
}

提醒一下:子视图总是在

中调整大小
- (void)layoutSubviews //UIView
- (void)viewDidLayoutSubviews //UIViewController

这使得您的代码对于不同的UIInterfaceOrientations和不同的设备是安全的。

答案 2 :(得分:0)

我把它放在viewDidLoad中。如果你把它放在一个重复的方法中,每次调用时它的大小都会增加。