代码之家  ›  专栏  ›  技术社区  ›  eugene

如何以编程方式创建视图并根据superview设置其框架?(iphone手机)

  •  0
  • eugene  · 技术社区  · 14 年前

    我对superview、loadView()、viewDidLoad()、viewWillAppear()完全迷茫了。

    最后,我想将控制器的帧设置为superview的边界并利用[自我观点在我的viewDidLoad()上。(也许这是不可能的?)

    下面是让我感到悲伤的代码片段。。

    // add the controller's view to the scroll view
    if (nil == controller.view.superview) {
    CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0;
        controller.view.frame = frame;
        [scrollView addSubview:controller.view];
        // I'd like to set controller.view 's frame using superview(scrollView here).
    }
    

    显然,零==控制器.视图.超级视图调用控制器的viewDidLoad。

    我过去常去[自我观点边界]并在我的viewDidLoad中使用它
    因为我想在将视图添加到superview之后设置它的帧,所以我想我需要移动使用它的代码[自我观点去别的地方。
    搬到什么地方好? 还是有更好的办法?

    2 回复  |  直到 12 年前
        1
  •  0
  •   grahamparks    14 年前

    第一次打电话给 controller.view self.view 为每个视图控制器自动触发视图加载机制和viewDidLoad通知(我假设 self

    ( loadView

        2
  •  0
  •   eugene    14 年前

    我将总结这个问题和我的解决办法。

    问题的实质是,两个函数调用的顺序:viewDidLoad和addSubview不能切换。

    我想要的是,
    根据superview设置子视图的框架,只有在addSubview之后才能完成。
    但同时,在加载后,我有适当的[自我观点边界]。

    由于viewDidLoad必须在addSubview之前调用,viewDidLoad将无法具有正确的[自我观点[边界]信息。

    解决方案, 我声明了一个superViewBounds变量,并在分配视图控制器之后但在创建视图之前设置它们。并在viewDidLoad中使用了bounds变量。

    还有一件事,我仍然不知道如何才能获得navigationViewController的主视图(我认为它被称为导航视图)边界/帧信息。

    希望它有帮助,并希望有人张贴一个更好的解决方案,如果有。