【问题标题】:iOS: view height not set correctly in viewDidLoadiOS:viewDidLoad 中未正确设置视图高度
【发布时间】:2011-06-17 21:10:01
【问题描述】:

我有一个从 nib 加载的视图控制器,其中我定义了一个高度为 346 像素的滚动视图。但是,当我这样做时:

int h = scrollView.frame.size.height;
NSLog(@"%d",h);

在 viewDidLoad 中我得到 375。

我需要 viewDidLoad 中的适当高度(或其他类似方法),以便我可以根据高度以编程方式设置滚动视图的内容(不希望它垂直“溢出”,仅水平“溢出”,它的分页) .

滚动视图打开了每一行自动调整大小。 (全是鲜红色)。奇怪的是,当视图加载时,我可以看到滚动视图是(正确的)346 像素高而不是 375,因此它必须在 viewDidLoad 和显示视图之间的某个位置更改为正确的值。

我在这里陷入了死胡同,任何获得适当大小的视图的方法都会非常有帮助。在此先感谢您,如果您需要更多信息,请发表评论。

edit:我解决它的方法是在 viewDidLoad 中放置一个 0.1 秒的计时器,当调用该计时器时,我完成了我需要做的工作。不过这有点小题大做,因此我们将不胜感激任何其他建议。

【问题讨论】:

  • 你是在[super viewDidLoad]之后调用那个代码吗?
  • benwong:不,我忘了叫super,但我只是在开头添加了它,没有任何改变。我确实设法通过我在编辑中展示的 hack 解决了这个问题。
  • 我们在代码中看到的高度单位是不是像素。它们是积分。这就是为什么我们可以编写代码并让它在 iPhone 4s 和普通 iPhone 上正确显示的原因。仅供参考:)
  • 呵呵,是的,我知道,我只是马虎......
  • 这是一个很好的答案:stackoverflow.com/a/6758424/864286

标签: iphone ios uiscrollview ios-4.2 viewdidload


【解决方案1】:

看看这个link。 您的子视图尚未在超级视图中放置和布局。例如,在viewDidAppear: 中获取视图的大小。

【讨论】:

    【解决方案2】:

    执行额外布局类型计算的正确位置一般在viewWillLayoutSubviewsviewDidLayoutSubviewsDocs here。这也来自“处理视图旋转”部分:

    viewWillLayoutSubviews 方法在视图被调用后也被调用 由其父级调整大小和定位。如果视图控制器不是 发生方向变化时可见,然后是旋转方法 永远不会被调用。但是,viewWillLayoutSubviews 方法被调用 当视图变得可见时。

    【讨论】:

    • 感谢您的回答,definitley 看起来是当今人们应该做的正确事情——尽管当我提出这个问题时,API 并不存在 :D
    • 正确;这些方法是在 iOS5 中添加的。对于 iOS5 之前的版本,您可以在 viewDidAppear 中进行初始布局。或者您可以为您的控制器实现自己的视图子类并覆盖 layoutSubviews。
    猜你喜欢
    • 2019-03-25
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多