用autolayout如何在横竖屏切换情况下改变控件的位置

在IB中,你用的autolayout来设置控件的位置和大小,你有一个需求,有一个imageView,水平居中,竖屏时距离top 280,但横屏时只有180,需要往上移一下。这怎么实现呢,好像在IB中没法设置他的动态距离吧?(如果哪位知道,请告诉我)

IB中不能设置,只好在代码中设置了。因为每次转屏时都会调用viewWillLayoutSubviews,所以在这个方法里设置就可以,具体方法是:


-(void)viewWillLayoutSubviews

{

    if (constraint) {

        [self.view removeConstraint:constraint];

    }

    if ([UIApplication sharedApplication].statusBarOrientation == UIDeviceOrientationPortrait || [UIApplication sharedApplication].statusBarOrientation == UIDeviceOrientationPortraitUpsideDown)

    {

       constraint = [

                      NSLayoutConstraint

                      constraintWithItem:self.view

                      attribute:NSLayoutAttributeTop

                      relatedBy:NSLayoutRelationEqual

                      toItem:self.backgroundImage

                      attribute:NSLayoutAttributeTop

                      multiplier:1.0f

                      constant:-280.0f

                      ];

    }

    else

    {

        constraint = [

                      NSLayoutConstraint

                      constraintWithItem:self.view

                      attribute:NSLayoutAttributeTop

                      relatedBy:NSLayoutRelationEqual

                      toItem:self.backgroundImage

                      attribute:NSLayoutAttributeTop

                      multiplier:1.0f

                      constant:-200.0f

                      ];

        

    }

    [self.view addConstraint:constraint];

}


从上面的代码中你就可以看出,做法就是判断是横屏还是竖屏,然后给self.view(也就是根view)加一个约束,距离imageView 280。
当转屏时,就会调用这个方法,然后重新设置imageview的位置,从而达到了需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值