Don_Mag icon

Untitled

Don_Mag | PRO | 08/26/24 11:35:56 AM UTC (Edited) | 0 ⭐ | 7822 👁️ | Never ⏰ | []
Swift |

6.93 KB

|

None

|

0 👍

/

0 👎

// using a UIScrollView
 
class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .systemBackground
        
        let scrollView = UIScrollView()
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.showsVerticalScrollIndicator = false
        scrollView.showsHorizontalScrollIndicator = false
        scrollView.bounces = true
        self.view.addSubview(scrollView)
        
        NSLayoutConstraint.activate([
            scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
            scrollView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20),
            scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
        ])
        
        // Create the UILabels, UIImageView, and UIButton
        let titleLabel = UILabel()
        titleLabel.text = "Your Intelligence Types"
        titleLabel.font = UIFont(name: "Inter-Bold", size: 20)
        titleLabel.textAlignment = .center
        
        // Create the UILabels, UIImageView, and UIButton
        let descriptionLbl = UILabel()
        descriptionLbl.text = "Different types of intelligence highlight the diverse ways people think, solve problems, and interact with the world around them."
        descriptionLbl.font = UIFont(name: "Inter-Regular", size: 14)
        descriptionLbl.textAlignment = .left
        descriptionLbl.numberOfLines = 0
        
        titleLabel.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview(titleLabel)
        
        descriptionLbl.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview(descriptionLbl)
        
        // so we can see the framing
        scrollView.backgroundColor = .init(white: 0.95, alpha: 1.0)
        titleLabel.backgroundColor = .cyan
        descriptionLbl.backgroundColor = .green
 
        let cg = scrollView.contentLayoutGuide
        let fg = scrollView.frameLayoutGuide
        
        // Set constraints for the stackView
        NSLayoutConstraint.activate([
            titleLabel.topAnchor.constraint(equalTo: cg.topAnchor, constant: 20),
            titleLabel.leadingAnchor.constraint(equalTo: cg.leadingAnchor, constant: 20),
            
            // don't set a trailing anchor
            //titleLabel.trailingAnchor.constraint(equalTo: cg.trailingAnchor, constant: -20),
            
            // set the title label width to the width of the scrollView's frame layout guide
            //  minus 40-points (20-points on each side)
            titleLabel.widthAnchor.constraint(equalTo: fg.widthAnchor, constant: -40.0),
            
            titleLabel.heightAnchor.constraint(equalToConstant: 30)
        ])
        
        // Set constraints for the stackView
        NSLayoutConstraint.activate([
            descriptionLbl.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 20),
            descriptionLbl.leadingAnchor.constraint(equalTo: cg.leadingAnchor, constant: 20),
            
            // don't hard-code the width
            //descriptionLbl.widthAnchor.constraint(equalToConstant: 350),
            
            // set the descriptionLbl label width to the width of the scrollView's frame layout guide
            //  minus 40-points (20-points on each side)
            descriptionLbl.widthAnchor.constraint(equalTo: fg.widthAnchor, constant: -40.0),
            
            // if you want the description label height to "auto-size"
            //  don't set the height here
            //descriptionLbl.heightAnchor.constraint(equalToConstant: 60)
        ])
        
 
        var previousProgressView : UIProgressView? = nil
        let previousTitleHeight: CGFloat = 30
        let progressViewHeight: CGFloat = 20
        let labelHeight: CGFloat = 20
        let verticalSpacing: CGFloat = 20
        
        var n = 0;
        
        // I don't have your data, so let's just add 20 progress view's (witht their labels)
        //for (key, value) in totalTypes {
        for i in 0..<20 {
            let typeLabel = UILabel()
            
            //typeLabel.text = key
            typeLabel.text = "key \(i)"
            
            typeLabel.font = UIFont(name: "Inter-Bold", size: 16)
            typeLabel.textAlignment = .left
            typeLabel.backgroundColor = .yellow
            
            typeLabel.translatesAutoresizingMaskIntoConstraints = false
            
            let iprogressView = UIProgressView(progressViewStyle: .bar)
            iprogressView.trackTintColor = UIColor(red: 0.07, green: 0.45, blue: 0.87, alpha: 0.1)
            iprogressView.tintColor = UIColor(red: 0.07, green: 0.45, blue: 0.87, alpha: 1.00)
            iprogressView.layer.cornerRadius = 4
            iprogressView.clipsToBounds = true
            
            //iprogressView.setProgress(Float(userTypes[key] ?? 0) / Float(value), animated: true)
            iprogressView.setProgress(Float(i) * 0.05, animated: true)
            
            iprogressView.translatesAutoresizingMaskIntoConstraints = false
            
            let transform : CGAffineTransform = CGAffineTransform(scaleX: 1.0, y: 3.0)
            iprogressView.transform = transform
            
            let progressLabel = UILabel()
            
            //let progressValue = round(((Float(userTypes[key] ?? 0) / Float(value)) * 100) * 100) / 100
            let progressValue = String(format: "%0.2f", Float(i) * 0.05 * 100.0)
            progressLabel.text = "\(progressValue) %"
            
            progressLabel.translatesAutoresizingMaskIntoConstraints = false
            progressLabel.font = UIFont(name: "Inter-Regular", size: 16)
            progressLabel.backgroundColor = .systemYellow
            
            scrollView.addSubview(typeLabel)
            scrollView.addSubview(iprogressView)
            scrollView.addSubview(progressLabel)
            
            NSLayoutConstraint.activate([
                typeLabel.topAnchor.constraint(equalTo: previousProgressView?.bottomAnchor ?? descriptionLbl.bottomAnchor, constant: previousProgressView == nil ? verticalSpacing : verticalSpacing),
                typeLabel.leadingAnchor.constraint(equalTo: cg.leadingAnchor, constant: 20),
                //typeLabel.trailingAnchor.constraint(equalTo: cg.trailingAnchor, constant: -20),
                typeLabel.heightAnchor.constraint(equalToConstant: 20),
                
                iprogressView.topAnchor.constraint(equalTo: typeLabel.bottomAnchor, constant: 20),
                iprogressView.leadingAnchor.constraint(equalTo: cg.leadingAnchor, constant: 20),
                iprogressView.widthAnchor.constraint(equalToConstant: 200),
                iprogressView.heightAnchor.constraint(equalToConstant: 3),
                
                // Position the label next to the progressView
                progressLabel.leadingAnchor.constraint(equalTo: iprogressView.trailingAnchor, constant: 10),
                progressLabel.centerYAnchor.constraint(equalTo: iprogressView.centerYAnchor)
            ])
            
            // Update the previousProgressView reference
            previousProgressView = iprogressView
            n += 1
        }
        
        // we MUST have a bottom constraint to let the scrollView know it has content to scroll
        previousProgressView?.bottomAnchor.constraint(equalTo: cg.bottomAnchor, constant: -20.0).isActive = true
        
        // we're using auto-layout / constraints ... don't do this
        // Set the content size of the scrollView
        //let totalContentHeight = (CGFloat(totalTypes.count) * (labelHeight + progressViewHeight + verticalSpacing + CGFloat(100))) + verticalSpacing + CGFloat(2000)
        //scrollView.contentSize = CGSize(width: self.view.frame.width, height: totalContentHeight)
 
    }
}
 
// NOTE: based on the layout, this code assumes we want vertical scrolling only... so, no need to set constraints to the content layout guide trailing.
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎