ios - स्क्रॉल 3 में स्क्रॉलव्यू प्रोग्रामेटिक रूप से उपयोग करना




swift swift3 (3)

मैंने अन्य प्रश्नों की खोज की है और अभी भी मेरे स्क्रॉलव्यू को प्रोग्रामिक रूप से तेज़ी से ऑटोलॉयट के साथ बनाने में थोड़ी परेशानी महसूस होती है। नीचे दिए गए चित्र में दिखाए अनुसार मैं अपना स्क्रॉलव्यू प्राप्त करने में सक्षम हूं, लेकिन जब मैं नीचे स्क्रॉल करता हूं तो मेरा दूसरा लेबल होता है। नहीं दिखा और 'स्क्रॉल टॉप' लेबल गायब नहीं हुआ।

किसी को उम्मीद है कि नीचे मेरे कोड की समीक्षा करने में मदद मिल सकती है!

import UIKit

class ViewController: UIViewController {

let labelOne: UILabel = {
    let label = UILabel()
    label.text = "Scroll Top"
    label.backgroundColor = .red
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()

let labelTwo: UILabel = {
    let label = UILabel()
    label.text = "Scroll Bottom"
    label.backgroundColor = .green
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()


override func viewDidLoad() {
    super.viewDidLoad()

    let screensize: CGRect = UIScreen.main.bounds
    let screenWidth = screensize.width
    let screenHeight = screensize.height
    var scrollView: UIScrollView!
    scrollView = UIScrollView(frame: CGRect(x: 0, y: 120, width: screenWidth, height: screenHeight))
    scrollView.contentSize = CGSize(width: screenWidth, height: 2000)
    scrollView.addSubview(labelOne)
    scrollView.addSubview(labelTwo)


    view.addSubview(labelOne)
    view.addSubview(labelTwo)
    view.addSubview(scrollView)

    // Visual Format Constraints
    view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": labelOne]))
    view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-100-[v0]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": labelOne]))

    // Using iOS 9 Constraints in order to place the label past the iPhone 7 view
    view.addConstraint(NSLayoutConstraint(item: labelTwo, attribute: .top, relatedBy: .equal, toItem: labelOne, attribute: .bottom, multiplier: 1, constant: screenHeight + 200))
    view.addConstraint(NSLayoutConstraint(item: labelTwo, attribute: .right, relatedBy: .equal, toItem: labelOne, attribute: .right, multiplier: 1, constant: 0))
    view.addConstraint(NSLayoutConstraint(item: labelTwo, attribute: .left, relatedBy: .equal, toItem: labelOne, attribute: .left, multiplier: 1, constant: 0)     

    }

}

दो चीज़ें।

1. अपने दृश्य को स्क्रॉल करने के लिए लेबल जोड़ें, न कि अपना दृश्य

आप चाहते हैं कि आपका लेबल स्क्रॉल दृश्य के साथ स्क्रॉल हो, तो आपको इसे अपने दृश्य पर नहीं जोड़ना चाहिए। अपना कोड चलाते समय, आप स्क्रॉल कर सकते हैं लेकिन वहां पर निर्धारित लेबल आपके दृश्य पर पिन किया जाता है, आपके स्क्रॉल दृश्य पर नहीं

2. सुनिश्चित करें कि आपने अपनी बाधाओं को सही ढंग से जोड़ा है

अपने स्टोरीबोर्ड पर यह देखने की कोशिश करें कि एक दृश्य के लिए बाधा का क्या संयोजन पर्याप्त है। एक लेबल के लिए कम से कम 4 बाधाओं की आवश्यकता होती है।

जमीनी स्तर

यहां आपके कोड का एक संशोधित संस्करण है। बाधा के लिए मैंने पैडिंग लेफ्ट, पेडिंग टॉप, चौड़ाई और ऊंचाई को जोड़ा और यह काम करता है। मेरा कोड है

let labelOne: UILabel = {
    let label = UILabel()
    label.text = "Scroll Top"
    label.backgroundColor = .red
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()

let labelTwo: UILabel = {
    let label = UILabel()
    label.text = "Scroll Bottom"
    label.backgroundColor = .green
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()


override func viewDidLoad() {
    super.viewDidLoad()

    let screensize: CGRect = UIScreen.main.bounds
    let screenWidth = screensize.width
    let screenHeight = screensize.height
    var scrollView: UIScrollView!
    scrollView = UIScrollView(frame: CGRect(x: 0, y: 120, width: screenWidth, height: screenHeight))

    scrollView.addSubview(labelTwo)

    NSLayoutConstraint(item: labelTwo, attribute: .leading, relatedBy: .equal, toItem: scrollView, attribute: .leadingMargin, multiplier: 1, constant: 10).isActive = true
    NSLayoutConstraint(item: labelTwo, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 200).isActive = true
    NSLayoutConstraint(item: labelTwo, attribute: .top, relatedBy: .equal, toItem: scrollView, attribute: .topMargin, multiplier: 1, constant: 10).isActive = true
    NSLayoutConstraint(item: labelTwo, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 30).isActive = true

    scrollView.contentSize = CGSize(width: screenWidth, height: 2000)
    view.addSubview(scrollView)

}

और स्क्रॉल दृश्य इस तरह दिखता है


ये उत्तर नेविगेशन बार में बड़े शीर्षक के साथ काम नहीं करते हैं। सुनिश्चित करें कि आपके पास आपके दृश्य में नीचे कोड है (अपने व्यू कंट्रोलर का तरीका):

self.navigationController?.navigationBar.prefersLargeTitles = false

स्क्रॉलव्यू चित्र को वॉलपेपर पर सेट करें:

@IBOutlet var scroll_view_img: UIScrollView!

var itemPhotoList = NSMutableArray()

var button = NSMutableArray()    

@IBOutlet var imageview_big: UIImageView!

override func viewDidLoad() {

    super.viewDidLoad()
    itemPhotoList = ["grief-and-loss copy.jpg","aaa.jpg","image_4.jpeg"]        

    // button = ["btn1","btn2"]

    let width:CGFloat = 100
    let height:CGFloat = 100
    var xposition:CGFloat = 10
    var scroll_contont:CGFloat = 0

    for i in 0 ..< itemPhotoList.count
    {
        var button_img = UIButton()
        button_img = UIButton(frame: CGRect(x: xposition, y: 50, width: width, height: height))
        let img = UIImage(named:itemPhotoList[i] as! String)
        button_img.setImage(img, for: .normal)
        scroll_view_img.addSubview(button_img)
        button_img.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        button_img.tag = i
        view.addSubview(scroll_view_img)
        xposition += width+10
        scroll_contont += width
        scroll_view_img.contentSize = CGSize(width: scroll_contont, height: height)
    }
}

func buttonAction(sender: UIButton!)
{
    switch sender.tag {
    case 0:
        imageview_big.image = UIImage(named: "grief-and-loss copy.jpg")
    case 1:
        imageview_big.image = UIImage(named: "aaa.jpg")
    case 2:
        imageview_big.image = UIImage(named: "image_4.jpeg")
    default:
        break
    }
}




autolayout