ios - 使用了autolayout就无法在viewDidLoad中改变视图的frame了吗?
巴扎黑
巴扎黑 2017-04-17 15:27:26
0
2
297
  • 假设,在xib文件中定义了视图控制器的view,其中有一个label,被放置在view的中心位置(通过constraints固定)。

  • 现在想通过触摸屏幕的某个点实现label从左滑入,从右滑出的效果(目标-动作)。于是我在viewDidLoad中将label的frame设置到屏幕左边,窗口外侧。可是实现效果却是label从原地冒了出来(就是不知道什么时候label的frame又被改回了xib中的frame)。

  • 我试过在动作方法中对label的frame进行同样的设置,这时效果符合预期。所以我的问题是,为什么不能viewDidLoad方法中进行这样的修改,我记得同视图相关的设置都应该在这个方法里完成啊?

巴扎黑
巴扎黑

全部回覆(2)
左手右手慢动作

1 把label的限制拿出來

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *lb_centerLeadingConstraint;

2 點擊時改變約束

- (IBAction)moveAction:(id)sender {
    [UIView animateWithDuration:1 animations:^{
        self.lb_centerLeadingConstraint.constant=320;//根据需求改变大小
        [self.lb_center layoutIfNeeded];

    }];
}
大家讲道理
  1. 從初始位置出現是因為在執行佈局操作的時候會根據你的約束來產生 frame,你的初始約束導致的這​​個行為的發生。

  2. 如果你想從左滑向中間,那麼你應該先設定初始約束在螢幕左邊 (UILabel)|Screen|。然後在執行 Target Action 行為時修改 UILabel 約束的 constant。接著執行佈局操作。就如@paul_ding 的第二個答案,不過建議改成:

- (IBAction)moveAction:(id)sender {
    self.lb_centerLeadingConstraint.constant=320;//根据需求改变大小
    [UIView animateWithDuration:1 animations:^{
        [self.lb_center layoutIfNeeded];

    }];
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!