2017-02-21 104 views
0
let obj = MainStoryboard().instantiateViewController(withIdentifier: "SomeVC") as! SomeVC 
obj.delegate = self 

obj.modalPresentationStyle = .popover 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) 
self.present(obj, animated: true, completion: nil) 

關於設置斷點,調試器進入最後一行。之後,它直接進入AppDelegate班的第一線。Swift3:在彈出時出現崩潰

我已經正確設置了異常中斷點。我可能在哪裏犯錯誤?是否與sourceView有關popoverPresentationController?我不確定。

我想要做的是在中心設置popoverPresentationController。任何幫助?

編輯: 我加入了sourceView的代碼像下面&現在它的工作:

obj.popoverPresentationController?.sourceView = self.view 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 1, height: 1) 

然而,這是不是在屏幕的中央。把屏幕截圖作爲參考。我如何將它放到中心並移除方向箭頭?

enter image description here

+1

任何崩潰報告? – raki

+0

在控制檯中,沒有。除了:'libC++ abi.dylib:終止於類型爲NSException的未捕獲異常' –

+1

顯示完整的崩潰報告 –

回答

1

你必須結合使用sourceViewsourceRect超過規定流行錨點,像以下:

obj.popoverPresentationController?.sourceView = self.view 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 1, height: 1) 

另外,如果你不想錨點箭頭到那裏,然後用:

obj.popoverPresentationController?.permittedArrowDirections = .init(rawValue: 0) 

它會讓你的彈出顯示在沒有箭頭/定位點的中央。

1
Try this: 
    let obj = MainStoryboard().instantiateViewController(withIdentifier: "SomeVC") as! SomeVC 
    obj.delegate = self 
    obj.modalPresentationStyle = .overCurrentContext 
    self.navigationController?.present(obj, animated: false, completion: { 
          }) 
+0

這不是崩潰,但彈出窗口是全屏,我希望它是682 x 450的大小。所以,有點不起作用。 –

+0

我不知道這是否可能。嘗試更改objViewcontroller的約束,以便將其呈現爲所需的維度。 – Anuraj

2

完成以下代碼更改後,我才能使其工作。

let obj = MainStoryboard().instantiateViewController(withIdentifier: "SomeVC") as! SomeVC 
obj.delegate = self 

obj.modalPresentationStyle = .popover 
obj.popoverPresentationController?.permittedArrowDirections = .init(rawValue: 0) 
obj.popoverPresentationController?.sourceView = self.view 
obj.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 1, height: 1) 
self.present(obj, animated: true, completion: nil) 

謝謝大家的努力。