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

Posted

技术标签:

【中文标题】为 UISplitView 的详细视图获取错误的框架中心【英文标题】:getting wrong center of frame for detail view for UISplitView 【发布时间】:2015-07-15 06:56:38 【问题描述】:

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

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

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

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

示例: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)

【问题讨论】:

试试 CGPointMake(CGRectGetMidX(self.yourCustomView.bounds), CGRectGetMidY(self.yourCustomView.bounds)); 你尝试用什么方法得到这个值? 我在我的 GraphView 中分配了 center / screenCenter : UIView 类。我尝试从覆盖 drawRect 中绘制/获取输出 我正在尝试 Avijit 的建议无济于事,但 self 似乎无法直接链接到 GraphView...尝试了 self.(GraphView) 但似乎无法达到界限。 什么时候你会读出这些价值吗?最终的屏幕帧是在视图推入视图层次结构时定义的,因此您不会在 之前获得最终帧。尝试在–viewWillAppear: 方法中读取帧的值,而不是–viewDidLoad: 【参考方案1】:

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

【讨论】:

【参考方案2】:

如果您不使用情节提要,这会有所帮助。 创建一个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
    

【讨论】:

以上是关于为 UISplitView 的详细视图获取错误的框架中心的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UISplitView 的详细视图中清除 UIWebView 的内容

通用应用程序中 UITabBar 内的 UISplitView 未更新详细信息视图

UISplitView - 为 masterView 中的每一行加载不同的 detailView

更改 UISplitView 中的 RootViewController

以编程方式隐藏UISplitview的masterDetailview

UISplitView,在设置代表时接收语义问题