2016-04-25 9 views
0

Ich habe daran gearbeitet, den UIPrinterPicker auf einem iPad mit NativeScript anzuzeigen. Ich habe große Hilfe von anderen erhalten.PopOver in NativeScript anzeigen

Das Problem, das ich jetzt habe, ist, dass der UIPrinterPicker PopOver nicht korrekt auf dem iPad angezeigt wird. Wie Sie auf dem Bild sehen können, ist der weiße Balken unter der Zeit der PopOver. Ich habe kein CSS angewendet und habe keine Dokumentation zum Stylen eines PopOver in NativeScript gefunden.

Hinweis: Ich kann den UIPrinterPicker auf dem iPhone anzeigen lassen, da er nicht in einem PopOver geöffnet werden muss.

enter image description here

Unten ist der entsprechende Code für die Seite:

var frames = require("ui/frame"); 
var view; 

function pageLoaded(args) { 
    var page = args.object; 
    view = page.ios; 
} 
exports.pageLoaded = pageLoaded; 

function selectPrinter() { 
    var runningOniPad = (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiomPad); 
    var printPicker = UIPrinterPickerController.printerPickerControllerWithInitiallySelectedPrinter(null); 
    var completionHandler = function(printerPicker, userDidSelect, error) { 
           if (error != null) { 
            console.log("error: " + error); 
           } 
           global.selectedPrinter = printerPicker.selectedPrinter; 
           console.log("selectedPrinter: " + global.selectedPrinter); 
          }; 
    if (! runningOniPad) { 
     printPicker.presentAnimatedCompletionHandler(false, completionHandler); 
    } else { 
     printPicker.presentFromRectInViewAnimatedCompletionHandler(view.view.frame, view.view, false, completionHandler); 
    } 

} 
exports.selectPrinter = selectPrinter; 

und unten ist die UI-XML:

<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded"> 
    <GridLayout columns="*" rows="*" horizontalAlignment="center" verticalAlignment="center" > 
     <StackLayout id="myStackLayout"> 
      <Button text="Select Printer" tap="selectPrinter" /> 
     </StackLayout> 
    </GridLayout> 
</Page> 

Gibt es eine Möglichkeit, die popover korrekt angezeigt werden?

Antwort

1

Ich habe Ihren Fall geprüft und, was ich die popover unter iPad zeigen, erfolgt eine benutzerdefinierte Ansicht mit Initwithframe wie folgt zu schaffen:

else { 

    var makeView = UIView.alloc().initWithFrame({origin: {x:0, y:0}, size: {width: 400, height: 600 } }); 

    printPicker.presentFromRectInViewAnimatedCompletionHandler(makeView.frame, view.view, false, completionHandler); 
} 

Sie können weiterhin Ihre neue Ansicht, welche die einheimische Art und Weise anpassen. Nur falls Sie sich fragen, wie relativ die Position Ihrer benutzerdefinierten Ansicht, dass Sie so etwas wie dieses

var makeView = UIView.alloc().initWithFrame({ 
    origin: { x: view.view.frame.origin.x, 
       y: view.view.frame.origin.y }, 
    size: { width: view.view.bounds.size.width/2, 
      height: view.view.bounds.size.height/2 } 
}); 

ich empfehlen, mit einem anderen Worte für die Variable Ansicht um Verwechslungen zu vermeiden, wenn das Lesen etwas wie verwenden können view.view

+0

Danke Nick! Ich schätze die Hilfe und stimme zu, dass die Variablenbenennung einige Aufräumarbeiten verwenden könnte. – swatkins

+0

Yep - Ich habe mich während des Tests in diese Falle fallen lassen und habe mich mit dieser Ansicht und der View.view Namensgebung gewundert :) –