0

学习 SWIFT。我似乎无法从我的视图中访问边界......无论我在哪个平台上工作,边界都会返回相同的值(600,600)。

我有一个 graphView : UIView & controller 嵌入在 navigationController 作为 SplitViewController 的详细信息。

我正在尝试获取我的 graphView 的中心:屏幕上的 UIView(splitViewController 的详细信息),但中心一直返回一个点太远(纵向)/底部(横向)。

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

例子: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 地理联合 master + detail 吗?

- >似乎x定位在纵向(但不是y)中是正确的,并且y在纵向中是正确的(但不是x)

4

2 回答 2

0

解决了!Storyboard 中的 graphView 缺少约束并使用默认的 600,600 个值。选择视图的情节提要中的“重置为建议的约束”修复了问题

于 2015-07-15T12:01:08.417 回答
0

如果您不使用情节提要,这会有所帮助。创建一个view您设置autoconstraints为 false 的位置。 ConstraintviewsafeAreaLayoutGuide它将找到您的辅助视图或详细视图的中心。

  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
    }
于 2021-08-07T15:57:00.873 回答