【问题标题】:how to change height of uiview defined in storyboard如何更改故事板中定义的uiview的高度
【发布时间】:2013-11-04 21:18:43
【问题描述】:

更新:我最终将下面的代码实现到它自己的方法中,然后从viewDidLayoutSubviewswillAnimateRotationToInterfaceOrientation 调用它。从viewDidAppear(按照建议)执行此操作不会在从 segue 返回时调整视图大小。


我在故事板中定义了一个 UIView,我将其用于我的 UIViewController 上的标题视图。我的代码中有一个常量,所有标题视图的高度为 80 个单位。我在情节提要200的标题视图上有一个标签。我想我可以使用这个标签来获取视图,修改底层CGRect的高度,然后将标题视图重新设置为修改后的CGRect。然而,这似乎并不影响身高。我错过了什么?

- (void)viewDidLoad
{
   UIView *header = [self.view viewWithTag:200];
   CGRect hrect = [header frame];
   hrect.size.height = HEADER_HEIGHT;
   [header setFrame:hrect];
 ...

【问题讨论】:

  • 请确认对[self.view viewWithTag:200]; 的调用确实为您返回了一些东西。确保 header 不为零。

标签: ios uiview


【解决方案1】:

问题是您将标签用作 NSString。 tag 属性是一个 NSInteger。尝试执行以下操作:

- (void)viewDidLoad
{
    UIView *header = [self.view viewWithTag:200];// give the tag as an int
    CGRect hrect = [header frame];
    hrect.size.height = HEADER_HEIGHT;
    [header setFrame:hrect];
...

另外,请确保您在 Storyboard 中定义的标签也是 200 而不是 @"200"。

希望这会有所帮助!

【讨论】:

  • 啊我的错,它是一个整数。实际上,它是一个常数,但为简洁起见,我将其编辑为我所描述的数字。很好的收获。
【解决方案2】:

尝试在viewDidAppear 上执行此操作,然后调用

[self setNeedsLayout]

【讨论】:

  • 嘿,这很好用,但是当我旋转或分离视图时,它会恢复到原来的大小。我还需要另一个钩子吗?
  • 是的,你需要针对不同的方向重新计算你的框架检查这些方法在苹果文档developer.apple.com/library/ios/documentation/uikit/reference/…'willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration: didRotateFromInterfaceOrientation: viewWillLayoutSubviews'
  • 好的,我创建了一个名为setupHeader 的新函数,它设置标题的高度并调用setNeedsLayout。从viewDidAppearwillAnimateRotation... 调用时它工作正常,但是当我从segue 返回时,标题会重置为情节提要中定义的大小。这很奇怪,因为 viewDidAppear 在 segue 之后被调用,所以 setupHeader 也应该被调用。
  • 认为我现在可以正常工作了。必须从 viewDidLayoutSubviews 调用调整大小的代码,以便在从 segue 返回后调整视图的大小
猜你喜欢
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多