1

私はデモ用の非常に単純なアプリを作成しており、使用して Web ページを表示しようとしています ( CookieにアクセスSFSafariViewControllerするには、使用する必要があります)。SFWKWebView

Userをいくつか紹介したいのですが、うまくUI buttonsいきませんでした。

私はこのスニペットを試しました(の完了コールバックに配置されましたpresentViewController()

let width: CGFloat = 66
let x: CGFloat = self.view.frame.width - width

// It can be any overlay. May be your logo image here inside an imageView.
let overlay = UIView(frame: CGRect(x: x, y: 20, width: width, height: 44))
overlay.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.5)
svc.view.addSubview(overlay)

...この投稿で概要を説明します。彼らの場合、リロード ボタンを小さなビューでカバーしようとしています。ユースケースに関係なく、私にとっては、ロードするとすぐにビューが消えますSFSafariViewController(一瞬見えて消えます)。

ボタンをモーダルで表示することを考えていました.OverContextが、ユーザーは と対話できずSFSafariViewController、これも機能しません。

これが基本的に私が求めているものです(粗くて簡単なモックアップを許してください)...基本的に、その上にビューが表示されたSafariViewController(下を参照)...透明性は、それがSafari上に表示されていることを示すためのものです)。

ここに画像の説明を入力

任意の推奨事項は大歓迎です。

4

1 に答える 1

1

考え出した...推奨される「四角形を描く」コードが期待どおりに機能しないという、わずかな競合状態が発生している可能性があります。私がしたこと:

  • サブクラス化SFSafariWebViewController
  • では、追加のビュー要素を描画するviewDidAppearを使用してわずかな遅延を実装しましたNSTimer

これにより、問題が発生していたステータスバーを非表示にすることもできました (モックアップを参照)。

関連するコードは次のとおりです。

import UIKit
import SafariServices

class MySafariVC: SFSafariViewController {

    override func viewDidLoad() {
         super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        var frame = self.view.frame
        let OffsetY: CGFloat  = 44
        frame.origin = CGPoint(x: frame.origin.x, y: frame.origin.y - OffsetY)
        frame.size = CGSize(width: frame.width, height: frame.height + (1 * OffsetY))
        self.view.frame = frame

        NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "drawNavBar", userInfo: nil, repeats: false)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("i laid out my subviews")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }

    func drawNavBar() {
        let height: CGFloat = 44
        let y: CGFloat = self.view.frame.height - height

        // It can be any overlay. May be your logo image here inside an imageView.
        let overlay = UIView(frame: CGRect(x: 0, y: y, width: self.view.frame.width, height: height))
        overlay.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.9)
        self.view.addSubview(overlay)
    }
}
于 2016-03-10T23:00:50.167 に答える