【问题标题】:changing self.view frame doesn't work更改 self.view 框架不起作用
【发布时间】:2012-11-05 15:18:26
【问题描述】:

我有以下结构:

UIViewController > UIView (self.view) > UITableView (self.tableView - IBOutlet)

我正在尝试将整个物体向上移动 59 像素,我试过了:

- (void)viewWillAppear:(BOOL)animated {

    self.view.frame = CGRectMake(0, -59, 320, 367 + 59);
    // or
    self.tableViewMe.frame = CGRectMake(0, -59, 320, 367 + 59);;

    NSLog(@"%f", self.view.frame.origin.x);
    NSLog(@"%f", self.view.frame.origin.y);
    NSLog(@"%f", self.view.frame.size.width);
    NSLog(@"%f", self.view.frame.size.height);

    NSLog(@"%f", self.tableView.frame.origin.x);
    NSLog(@"%f", self.tableView.frame.origin.y);
    NSLog(@"%f", self.tableView.frame.size.width);
    NSLog(@"%f", self.tableView.frame.size.height);

    [super viewWillAppear:animated];

}

坐标是对的,但是view和table是一样的,根本不动。此外,如果我将以下代码添加到 IBAction,例如点击按钮,那么它可以工作:

self.view.frame = CGRectMake(0, -59, 320, 367 + 59);

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    尝试将其粘贴在 viewDidAppear 而不是 viewWillAppear 中。

    【讨论】:

    • IBOutlets 只有在视图完全加载后才能正确连接。我一般把它放在 viewDidLoad 方法中;)
    • viewDidLoad 运行一次。每次用户进入视图控制器时我都需要检查它。 =/
    • viewDidAppear,而不是 viewDidLoad。每次 viewController 出现时 viewDidAppear 都会运行。
    • 是的,只是在确认这一点。您说 viewDidLoad 只运行一次...这是正确的,但在这种情况下无关紧要,因为您没有将代码放入 viewDidLoad,而是将其放入 viewDidAppear :D
    • 我正在回复 iLive。另外,现在我的视图正在重置到原始位置,即使方法为空也会消失。
    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多