2016-04-22 10 views
1

Gibt es eine Möglichkeit, den Abstand zwischen dem äußeren Bildschirmrand und dem Balkenschaltelement zu ermitteln. Ich dachte an etwas Ähnliches wie die Höhe der Statusleiste?Abstand zwischen Bildschirmrand und Balkenknopfelement

(. Ich dies zu fragen, weil es anders ist je nach Gerät)

enter image description here Dies ist einiger Probecode:

let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, view.frame.size.width, 64)) 
    let navigationBar.backgroundColor = UIColor.redColor() 

    let barButtonItem = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: nil) 
    navigationItem.leftBarButtonItem = barButtonItem 
    navigationBar.items = [navigationItem] 

    let buttonItemView = barButtonItem.valueForKey("view") as! UIView 
    let frame = buttonItemView.superview!.convertRect(buttonItemView.frame, toView: UIApplication.sharedApplication().keyWindow?.rootViewController?.view) 
    let xCoordinateMin = CGRectGetMinX(frame) 
    let yCoordinateMax = CGRectGetMaxY(frame) 
    let yCoordinateMin = CGRectGetMinY(frame) 

    let label = UILabel(frame: CGRectMake(CGFloat(xCoordinateMin), CGFloat(yCoordinateMin), 100, yCoordinateMax - yCoordinateMin)) 
    label.backgroundColor = UIColor.greenColor() 

Aber es gibt mir immer noch 0 als xMin, obwohl es scheint mit dem arbeiten y-Koordinate ..

enter image description here

Antwort

0

mit diesem Code wurde gelöst:

let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, view.frame.size.width, 124)) 
    navigationBar.backgroundColor = UIColor.redColor() 

    let barButtonItem = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: nil) 
    navigationItem.leftBarButtonItem = barButtonItem 
    navigationBar.items = [navigationItem] 

    let buttonItemView = barButtonItem.valueForKey("view") as! UIView 
    let frame = buttonItemView.superview!.convertRect(buttonItemView.frame, toView: nil) 
    let xCoordinateMin: CGFloat = CGRectGetMinX(frame) 
    let xCoordinateMax: CGFloat = CGRectGetMaxX(frame) 
    let yCoordinateMax: CGFloat = CGRectGetMaxY(frame) 
    let yCoordinateMin = CGRectGetMinY(frame) 

    let label = UILabel(frame: CGRectMake(abs(xCoordinateMin), yCoordinateMin, xCoordinateMax - xCoordinateMin, yCoordinateMax - yCoordinateMin)) 
    label.backgroundColor = UIColor.greenColor() 

Der Trick bestand darin, das let xCoordinateMin als CGFloat zu deklarieren, weil es dann als negativer Wert angesehen wurde. Wenn Sie das Etikett erstellen, verwenden Sie einfach abs(), um den absoluten Wert zu erhalten. Sie haben jetzt ein Label, das absolut genauso groß ist wie Ihr Bar-Button!

enter image description here

-1
UIApplication.sharedApplication().statusBarFrame.height 
+0

ja Dank gehe ich das schon .. aber ich will den Abstand zwischen dem äußeren Bildschirmrand und einem Bar-Taste Elemente kennen. – manu

2

Am äußeren Bildschirm, ich nehme an, Sie sprechen über das Hauptfenster.

Sie können versuchen, um die Bar-Taste des Rahmens in Fenster des Koordinaten Umwandlung der Abstand zu jeder Richtung zu finden:

let buttonItemView = barButtonItem.valueForKey("view") as! UIView 
let frame = buttonItemView.superview!.convertRect(buttonItemView.frame, toView: nil) 

print("Distance to left: ", CGRectGetMinX(frame)) 
print("Distance to top: ", CGRectGetMinY(frame)) 

jedoch Hauptfenster Rotation Ereignisse empfängt und übergibt sie an Steuerungen, die bedeutet, dass es nicht der Fall ist Ändern Sie die Bildgröße, damit die oben genannte Lösung im Querformat nicht ordnungsgemäß funktioniert.

Sie können versuchen Schaltfläche rect auf das Koordinatensystem des Stamm Umwandlung View-Controller, aber jetzt haben Sie die Statusleiste Höhe zu berücksichtigen:

let frame = buttonItemView.superview!.convertRect(buttonItemView.frame, toView: UIApplication.sharedApplication().keyWindow?.rootViewController?.view) 
+0

mit CGRectGetMinX (Frame) Ich bekomme 0, aber sollte ich nicht stattdessen die Entfernung zum Hauptfenster bekommen? – manu

+0

Dann sollten Sie 'nil' für' toView' Parameter zu 'convertRect' Methode übergeben. Beispiel: 'buttonItemView.superview! .convertRect (buttonItemView.frame, toView: nil)' – ozgur

+0

scheint nicht zu funktionieren. – manu