更改 UIView 内的 UIButton 框架

Posted

技术标签:

【中文标题】更改 UIView 内的 UIButton 框架【英文标题】:Change UIButton frame inside UIView 【发布时间】:2014-12-15 17:39:58 【问题描述】:

我想在 iPhone 4/4s 屏幕上显示不同的 UIButton/UILabel/UISlider 尺寸。在父 ViewController viewDidAppear: 方法中,我可以通过调用 viewFormatting 函数来设置新的按钮框架。

- (void) viewFormatting

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    
        CGSize result = [[UIScreen mainScreen] bounds].size;

        //iPhone 4
        if (result.height == 480)
        
            self.myButton.frame = CGRectMake(x, y, width, height);
            self.myLabel.frame = CGRectMake(x, y, width, height);
            //etc.
        
    

但是当我尝试在单独的 UIView 类上的 initWithFrame: 内调用相同的方法 viewFormatting 时,按钮/标签框架不会调整大小。我还尝试在layoutSubviews 中调用该函数。我在viewFormatting 中放了一个NSLog,所以我知道它被正确调用了,但是按钮/标签框架没有改变。

注意:在这两种情况下,我都在 XIB 文件中创建了出口。

非常感谢任何帮助!

【问题讨论】:

写在ViewDidLayoutSubview中 是这样吗? ***.com/questions/19515924/… 你在使用 AutoLayout 吗? 不使用AutoLayout,需要调用viewDidLayoutSubview吗?还是像 viewDidAppear 一样自动调用? @nburk 啊,我使用的是 AutoLayout。我没有选中它,它工作正常。没有意识到单个 xib 可以单独使用自动布局。谢谢! 【参考方案1】:

更新:感谢@nburk,我意识到在我的 xib 文件上检查了使用 AutoLayout。删除上面的代码后完美运行。

我会把它留在这里给需要样品的人。

【讨论】:

那么你可以接受你自己的答案,这样更容易被注意到。【参考方案2】:

添加这个方法: -(无效)viewDidLayoutSubviews [超级 viewDidLayoutSubviews]; [自我视图格式化];

viewDidLayoutSubviews 会被自动调用。

【讨论】:

以上是关于更改 UIView 内的 UIButton 框架的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview内的UIView内的UIButton,ARC问题

UIView 内的 UIButton 目标操作

如何更改视图中每个 UIButton 的框架

滚动视图内的UIButton不可单击

UIScrollView 内的 UIView 上的 UIButton

程序化 UIView 内的程序化 UIButton 不起作用