【问题标题】:iOS cannot change frame of UIButtoniOS 无法更改 UIButton 的框架
【发布时间】:2012-10-07 15:01:46
【问题描述】:

我目前遇到一个非常奇怪的问题。我正在使用 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)];
}

【问题讨论】:

  • 如何显示更多上下文? sscce.org
  • 在尝试设置框架之前,请尝试NSLog("%@", button); 并确保它不为零。我怀疑插座设置不正确。
  • hmmm button in NSLog 和 _button in setFrame
  • 我的错..在更新中出错了。在我的代码中,我到处都使用了“_”。
  • 无论如何我都会以编程方式添加按钮,尽管添加所有属性需要更多的工作...... -.-

标签: ios uibutton storyboard


【解决方案1】:

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

希望对你有帮助

【讨论】:

  • 这似乎是一个快速的黑客和坏主意。最好只使用@IBOutlets 更改约束并修改button.layer.frame。
【解决方案2】:

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

 [self.button.layer setFrame:] 

在你的类头文件中导入 QuartzCore 框架,然后再使用它。 这也适用于自动布局。

【讨论】:

  • 赞成,它对我有用。我不知道为什么这个问题以前被否决了。
【解决方案3】:

你可以用这个

[_button setTranslatesAutoresizingMaskIntoConstraints:YES];

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 这确实对我有用,不需要我完全关闭“使用自动布局”。所以我可以在方便的时候混合使用自动布局和手动计算。 +1!
    【解决方案5】:

    //从父视图中移除视图

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

    //改变UIButton的框架

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

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

    [view addSubview:yourButton];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多