为 UISplitView 的详细视图获取错误的框架中心

getting wrong center of frame for detail view for UISplitView

学习SWIFT。从我的角度来看,我似乎无法访问边界...无论我在哪个平台上工作,边界 return 都是相同的值 (600,600)。

我有一个 graphView:UIView 和控制器作为 SplitViewController 的细节嵌入到 navigationController 中。

我正在尝试获取我的 graphView 的中心:屏幕上的 UIView(splitViewController 的 Detail),但中心保持 return 点太远向右(纵向)/底部(横向)。

我尝试了多种访问方式,但也许我对它的理解有误?

示例:var screenCenter: CGPoint = convertPoint( center, fromView: superview)

    println("bounds are  \(bounds)") // view boundaries
    println("frame is at \(frame)")  // frame where the view resides
    println(" center is at       \(center)")
    println(" ScreenCenter is at \(screenCenter)")

(输出)

bounds are  (0.0,0.0,600.0,600.0)
frame is at (0.0,0.0,600.0,600.0)
 center is at       (300.0,300.0)
 ScreenCenter is at (300.0,300.0)

-> 我怎样才能真正到达中心? SplitView地理联合大师+细节?

-> x 纵向定位正确(但 y 不正确),y 纵向定位正确(但 x 不正确)

已解决! Storyboard 中的 graphView 缺少约束并使用默认的 600,600 值。 "Reset to Suggested Constraints" 在故事板中选择了视图修复了问题

如果您不使用故事板,这会有所帮助。 创建一个 view 并将 autoconstraints 设置为 false。 Constraint viewsafeAreaLayoutGuide。它将找到您的辅助视图或详细视图的中心。

  var logoView :UIImageView = {
    let iv = UIImageView()
    iv.contentMode = .scaleAspectFit
    iv.backgroundColor = .green
    iv.translatesAutoresizingMaskIntoConstraints = false
    return iv
}()

override func viewDidLoad() {
    super.viewDidLoad()
    
    view.addSubview(logoView)
    logoView.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor).isActive = true
    logoView.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true
    logoView.heightAnchor.constraint(equalToConstant: 200).isActive = true
    logoView.widthAnchor.constraint(equalToConstant: 200).isActive = true
    }