swift - كيفية إنشاء وكوبفيو الحجم في سويفت 3/دائرة الرقابة الداخلية 10




storyboard ios10 (3)

إذا كنت تريد أن تعطي القيود التي حجم وعرض شبكة ويب فيما يتعلق وجهة نظر الحاويات، يمكنك أن تفعل مثل هذا.

     @IBOutlet weak var wkWebBackgroundView: UIView!
     var wkWebView:WKWebView!

     override func viewDidLoad() {
            super.viewDidLoad()
            setUpView()

        }
     func setUpView(){
            self.wkWebView = WKWebView(frame: CGRect.zero)     
            self.wkWebBackgroundView.addSubview(wkWebView)

            let height = NSLayoutConstraint(item: wkWebView, attribute: .height, relatedBy: .equal, toItem: wkWebBackgroundView, attribute: .height, multiplier: 1, constant: 0)
            let width = NSLayoutConstraint(item: wkWebView, attribute: .width, relatedBy: .equal, toItem: wkWebBackgroundView, attribute: .width, multiplier: 1, constant: 0)
            let top = NSLayoutConstraint(item: wkWebView, attribute: .top, relatedBy: .equal, toItem: wkWebBackgroundView, attribute: .top, multiplier: 1, constant: 0)
            let leading = NSLayoutConstraint(item: wkWebView, attribute: .leading, relatedBy: .equal, toItem: wkWebBackgroundView, attribute: .leading, multiplier: 1, constant: 0)

            view.addConstraints([leading, top, height, width])  
        }

أنا محاولة لإضافة وكوبفيو إلى بلدي التطبيق الذي يستغرق حوالي ~ 2/3 من الشاشة (ترك الفضاء في الأسفل). لأنه يبدو أن هناك أي وسيلة لإضافة WKWebView إلى القصة المصورة، وأضاف WKWebView العادية. ثم في طريقة عرض viewDidAppear أحاول إنشاء WKWebView بنفس الحدود. هل هذا نهج سليم؟

يبدو الرمز الخاص بي كما يلي:

    @IBOutlet var conversationView: UIView!

    override func viewDidAppear(_ animated: Bool) {
      let webView = WKWebView(frame: conversationView.frame)
      if let url = URL(string: "https://www.google.com") {
        webView.load(URLRequest(url: url))
      }

      // conversationView = webView // <-- doesn't work :\
      conversationView.addSubview(webView) // works!
    }

لا يعمل تبديل وجهات النظر بشكل صريح على الإطلاق، لذا أضيف عرض الويب كمشاهدة فرعية للعرض المؤقت الذي أضفته إلى لوحة العمل. هذا على الأقل يسمح لي أن يقيد موقفه وحجمه ولكن لا يزال يشعر كلودجي جدا، ومثل يجب أن يكون هناك طريقة أفضل للقيام بذلك ..


هذا نهج جيد جدا. فمن المعقول تماما أن يكون "عرض المحتوى" وظيفته هو مجرد لتوجيه عرض الويب في مكان، كما كان. ولكن سيكون من الأفضل لإضافة عرض الويب بالإضافة إلى القيود التي الحجم ووضعه.


لم يعمل أي من الإجابات الأخرى بالنسبة لي. الجواب من قبل ساميب شاه على طول الطريق الصحيح ولكن القيود ليست صحيحة تماما. الشيء المهم الذي يجب تذكره هو تعيين ترانزلاتيسوتوريزينغسماسكينتوكونستراينتس إلى فالس.

لذلك، وهنا حل بلدي. في القصة المصورة إنشاء إيفيو مع القيود والتخطيط الذي تريد ل وكويبفيو. في وحدة التحكم عرض الخاص بك إضافة التعليمات البرمجية:

@IBOutlet var contentView: UIView!
var wkWebView:WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    wkWebView = WKWebView(frame:contentView.frame)
    contentView.addSubview(wkWebView)
    constrainView(view: wkWebView, toView: contentView)

    let request = URLRequest(url: /* your url here */)
    wkWebView.load(request)
}

رمز تقييد العرض. يمكنك إضافة هذا إلى فئة الأدوات المساعدة إذا كنت ترغب في استخدامه أكثر من وحدة تحكم عرض واحدة.

func constrainView(view:UIView, toView contentView:UIView) {
    view.translatesAutoresizingMaskIntoConstraints = false
    view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true
    view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
    view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).isActive = true
    view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
}






ios10