从Bundle加载UIView仅部分填充屏幕

时间:2019-01-19 00:07:05

标签: swift uiview nsbundle

Screenshot from simulator iphone xr

你好。

使用Swift 4,我尝试将带有XIB的自定义UIView加载到UIViewController上。

但是,它似乎只能部分填满屏幕,我不确定为什么。

我做了以下事情:

  1. 视图控制器在UIStoryboard中定义
  2. 将UIView添加到_fileno()
  3. 中的UIViewController
  4. UIView swift文件和XIB通过文件所有者属性连接
  5. XIB文件已添加到viewDidLoad
  6. 使用Xcode可视化编辑器设置粉红色的背景色,而不用代码完成。
  7. 我使用iphone xr进行模拟,但是如果在iPhone 6s上进行模拟,则会遇到相同的问题

视图控制器代码为空,但我包括了相关部分:

copy bundle resources

UIView也很基本:

// QuestionViewController
class QuestionViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let subview = QuestionView()
        self.view.addSubview(subview)
    }
}

我使用在stackoverflow上找到的协议从捆绑包加载xib文件。最初,即使加载捆绑包,我也遇到很多问题,但是幸运的是,我能够解决此问题。无论如何,我的XIB协议文件在这里:

class QuestionView: UIView, XibView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupXib()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupXib()
    }

    func setupXib() {
        guard let v = loadFromXib() else {
            return
        }
        addSubview(v)
    }
}

-

问题:

为什么UIView不能填满整个屏幕或部分填满屏幕,我该如何解决?

谢谢

编辑:

情节提要中寻找的UIViewController只有一个视图,没有内容。

Storyboard

1 个答案:

答案 0 :(得分:1)

我认为您应该在Viewcontroller中使用一个UIview(0,0,0,0四个约束),然后为其分配一个自定义类,该类是UIView的子类,然后加载Xib文件,它肯定会占据整个屏幕

尝试这个人:: ----

 class QuestionViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            let subview = QuestionView()
            subview.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.width)
            self.view.addSubview(subview)
        }
    }