使用storyboard开发,从来源控制器Push到目标控制器,隐藏Tabbar,在模拟器中,跳转后的界面的布局控件从上往下移动

目标控制器需求:使用自动布局,让两行按钮在屏幕上,三个等高的间距,且隐藏TabBar。

问题描述:
在模拟器中,从来源控制器Push到目标控制器,跳转后的界面的布局控件从上往下移动。

出现问题的方法:

1.目标控制器的view的背景图片,自定义一个UIview,使用drawRect:方法把图片画上去。

- (void)drawRect:(CGRect)rect {

    UIImage *image = [UIImage imageNamed:@"luck_entry_background"];

    [image drawInRect:rect];

}

2.在storyboard中,先添加三个view,用这三个view平分屏幕,间隔为按钮的高,三个按钮的高不固定且相等。
这里写图片描述

3.在前三个view的间隔中布局所要添加的按钮。
这里写图片描述

4.设置三个按钮的颜色为透明,并在storyboard的属性栏,勾选隐藏TabBar。
这里写图片描述
这里写图片描述

模拟器运行结果:来源控制器Push到目标控制器后,界面上的控件从上往下移动。

问题原因:从来源控制器Push到目标控制器时,目标控制器的TabBar隐藏没有及时执行,当从storyboard中加载完目标控制的view后才去执行。在有navigationBar和TabBar的情况下,view的高是屏幕的高减去navigationBar和TabBar的高。当view显示后,TabBar隐藏,view的高变大,view就会重新布局,所以屏幕会有向下移动。

解决问题:控制器的view将要显示时,就会调用控制器的viewWillLayoutSubviews方法进行布局,所以只要在viewWillLayoutSubviews方法中提前让view的高加上TabBar的高就可以。如果只加上高,虽然屏幕上得控件不移动了,但是背景图片是画上去的,当屏幕尺寸改变时,背景会有拉伸的效果,解决的方法是背景图片不要画上去,应该在storyboard中,在view底部插入一个UIImageView做为背景图片,布局上下左右距离边框为0。

- (void)viewWillLayoutSubviews  {

    [super viewWillLayoutSubviews];

    CGFloat tabBarH = self.tabBarController.tabBar.bounds.size.height;

    // 提前让view的高加上TabBar,防止重新布局后界面移动
    self.view.height += tabBarH;


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为文本AI模型,我无法直接提供截图。但是,我可以为你提供一些文字指导来展示如何在Storyboard连接视图控制器并设置代理和数据源。 首先,打开你的Storyboard文件,并确保有一个视图控制器的场景。 1. 将一个NSCollectionView拖放到你的视图控制器的场景。 2. 在视图控制器的代码,添加一个IBOutlet来引用NSCollectionView。例如: ```swift @IBOutlet weak var collectionView: NSCollectionView! ``` 3. 在Storyboard,选视图控制器场景的NSCollectionView,然后按住Ctrl键并拖动到视图控制器。释放鼠标按钮时,选择"delegate"和"dataSource"选项。 4. 在你的视图控制器,实现NSCollectionViewDelegate和NSCollectionViewDataSource协议。例如: ```swift class ViewController: NSViewController, NSCollectionViewDelegate, NSCollectionViewDataSource { // ... } ``` 5. 在视图控制器的代码,为NSCollectionView设置代理和数据源。在视图控制器的`viewDidLoad`方法添加以下代码: ```swift override func viewDidLoad() { super.viewDidLoad() collectionView.delegate = self collectionView.dataSource = self // ... } ``` 6. 最后,在视图控制器实现NSCollectionViewDataSource协议的方法,例如`collectionView(_:numberOfItemsInSection:)`和`collectionView(_:itemForRepresentedObjectAt:)`。 通过这些步骤,在Storyboard连接视图控制器并设置代理和数据源后,你就可以在水平的NSCollectionView放置图片了。 希望这些文字指导能帮到你,如果有任何其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值