【问题标题】:Container View made in Storyboard will not change frame programmatically在 Storyboard 中制作的容器视图不会以编程方式更改框架
【发布时间】:2012-11-24 01:41:58
【问题描述】:

我有一个容器视图@property (weak, nonatomic) IBOutlet UIView *containerView;,但是当我设置它的框架时它不会移动。这是我的尝试:

- (void)setFramesForCategories
{
    CGRect frame = _containerView.frame;
    frame.origin.x = 20;
    frame.origin.y = self.view.frame.size.height - 52;
    frame.size.width = 236;
    frame.size.height = 60 * [[_dataDict objectForKey:@"Key"] count];
    _containerView.frame = frame;
}

我知道这是基本的,并且以前在我移动以编程方式创建的对象时对我有用,但现在对我不起作用。

【问题讨论】:

  • 我试过只使用静态数字而不是算法,但如果这就是你的意思,那也不起作用。
  • 这可能与 IB 中视图的布局约束有关。您要么需要更改它们,摆脱它们,要么通过更改约束来更改容器视图的框架,而不是显式设置框架。
  • @rdelmar 我确实在发布此问题之前尝试删除约束,但删除选项显示为灰色。我将如何通过代码更改它们?或者,还有其他方法可以删除它们吗?
  • 谢谢@rdelmar,你给了我足够的信息来弄清楚如何解决这个问题。我会发布答案。
  • 您可以使用 removeConstraint: 删除它们,但您需要为约束创建出口,以便能够将它们作为参数传递给该方法。

标签: ios xcode uiview uiviewcontroller containers


【解决方案1】:

我遇到的问题是 Storyboard 中设置的约束覆盖了帧更改。这解释了为什么我对以编程方式添加的对象没有同样的问题。要关闭项目的约束,我所要做的就是转到Storyboard.storyboard 文件,然后确保“实用程序”侧边栏已打开并选择“文件检查器”选项卡。然后我在“Interface Builder Document”下向下滚动并取消选择“Use Autolayout”。在此之后,我重新运行该项目以发现以编程方式设置框架确实有效。

【讨论】:

  • 为什么需要关闭自动布局?为什么不通过代码更改自动布局约束,然后尝试上面的框架更改?
  • 自动布局虽然在某些情况下提供了一个很好的解决方案来支持多个设备,但对于大多数项目来说通常都很糟糕。关掉它也不要难过,不只是你这样做。
【解决方案2】:

视图的“框架”属性用于布局。如果您在情节提要中布局了容器视图并想在代码中移动它。尝试“转换”属性。如,“self.containerView.transform = CGAffineTransformTranslate(self.containerView.transform, 0.0, 10.0);” => 将容器视图向上移动 10 点 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多