Skip to content

Instantly share code, notes, and snippets.

@ara-ta3
Last active September 22, 2020 08:41
Show Gist options
  • Save ara-ta3/1f4a3fce64867468dbd3b9861c687319 to your computer and use it in GitHub Desktop.
Save ara-ta3/1f4a3fce64867468dbd3b9861c687319 to your computer and use it in GitHub Desktop.
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class ViewController : UIViewController {
let dummyText: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.textColor = .black
label.text = "Maurice Minor"
return label
}()
let dummyLongText: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.textColor = .black
label.text = "Fuga nemo rerum. Maxime voluptatum error. Impedit eos qui. Non optio et. Ut dignissimos fuga. Quisquam quibusdam ut. Fugit voluptas atque. Eaque sed ut. Eaque nihil ratione. Iste enim possimus. Et vel illum. Dicta recusandae illum. Asperiores accusamus quisquam. Dolor voluptatem earum. Ut delectus quas. Provident ab et. In porro a. Eum fugit est. Totam dolore tenetur. Quisquam cupiditate rerum. Ut labore quis. Et sit vel. Sint repellat quisquam. Et enim illo. Ipsam aut exercitationem. Ut ut harum. Odit quaerat magni. Aliquam reprehenderit autem. Non voluptatibus facilis. Iure natus neque. Eligendi vitae rerum. Autem reprehenderit magni. Magni quo et. Quis nihil molestiae. Sunt quos in. Libero corrupti consequatur. Ullam ea rerum. Ut natus assumenda. Vitae at iusto. Facilis et reiciendis. Minima quaerat deserunt. Veritatis aut quia. Voluptas temporibus ut. Et excepturi ut. Nemo expedita sit. Ut dolor laudantium. Est non veniam. Quod libero et. Eius neque aut. Id voluptatem soluta. Quia nulla quo. Aut maxime alias. Quo optio ut. Quibusdam recusandae hic. Rem eum et. Ut eum nemo. Ut excepturi nihil. Sed aut id. Et reiciendis temporibus. Sit delectus commodi. Saepe eum rerum. Qui et accusantium. Distinctio exercitationem molestiae. Dolorum consectetur cumque. Sapiente esse et. Libero impedit explicabo. Qui in ut. Quo ratione autem. Dolorem voluptatem nobis. Expedita doloribus mollitia. Harum tenetur deserunt. Qui similique assumenda. Occaecati adipisci fugiat. Qui exercitationem veritatis. Excepturi dolorum iste. Ipsam cumque vitae. Minus dicta odio. Eos eaque fugiat. A delectus excepturi. Voluptas aut et. Soluta quibusdam at. Officia aspernatur consequatur. Sit asperiores recusandae. Delectus fugit sit. Molestias vel consequatur. Porro aliquam asperiores. Beatae id nihil. Laboriosam soluta dolor. Et est sed. Unde quia minus. Sapiente nam non. Dolor rerum sed. Explicabo asperiores deleniti. Consequatur voluptatem sint. Eum perspiciatis molestiae. Et nihil accusamus. Et aliquam ex. Sed ad atque. Et tempore aperiam. Asperiores aspernatur consequatur."
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
return label
}()
let contentsView: UIView = {
let contentsView = UIView()
contentsView.translatesAutoresizingMaskIntoConstraints = false
return contentsView
}()
let scrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
return scrollView
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.scrollView)
self.scrollView.addSubview(self.contentsView)
self.contentsView.addSubview(self.dummyText)
self.contentsView.addSubview(self.dummyLongText)
NSLayoutConstraint.activate([
self.scrollView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
self.scrollView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
self.scrollView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
self.scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
self.contentsView.topAnchor.constraint(equalTo: self.scrollView.topAnchor),
self.contentsView.leftAnchor.constraint(equalTo: self.scrollView.leftAnchor),
self.contentsView.rightAnchor.constraint(equalTo: self.scrollView.rightAnchor),
self.contentsView.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor),
self.contentsView.widthAnchor.constraint(equalTo: self.view.widthAnchor),
self.dummyText.topAnchor.constraint(equalTo: self.contentsView.topAnchor, constant: 8),
self.dummyText.leftAnchor.constraint(equalTo: self.contentsView.leftAnchor, constant: 16),
self.dummyText.rightAnchor.constraint(equalTo: self.contentsView.rightAnchor, constant: -16),
self.dummyLongText.topAnchor.constraint(equalTo: self.dummyText.bottomAnchor, constant: 16),
self.dummyLongText.leftAnchor.constraint(equalTo: self.contentsView.leftAnchor, constant: 16),
self.dummyLongText.rightAnchor.constraint(equalTo: self.contentsView.rightAnchor, constant: -16),
self.contentsView.bottomAnchor.constraint(equalTo: self.dummyLongText.bottomAnchor, constant: 16),
])
}
}
// Present the self.view controller in the Live self.view window
PlaygroundPage.current.liveView = ViewController()
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class ViewController : UIViewController {
let dummyText: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.textColor = .black
label.text = "Maurice Minor"
return label
}()
let dummyLongText: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.textColor = .black
label.text = "Fuga nemo rerum. Maxime voluptatum error. Impedit eos qui. Non optio et. Ut dignissimos fuga. Quisquam quibusdam ut. Fugit voluptas atque. Eaque sed ut. Eaque nihil ratione. Iste enim possimus. Et vel illum. Dicta recusandae illum. Asperiores accusamus quisquam. Dolor voluptatem earum. Ut delectus quas. Provident ab et. In porro a. Eum fugit est. Totam dolore tenetur. Quisquam cupiditate rerum. Ut labore quis. Et sit vel. Sint repellat quisquam. Et enim illo. Ipsam aut exercitationem. Ut ut harum. Odit quaerat magni. Aliquam reprehenderit autem. Non voluptatibus facilis. Iure natus neque. Eligendi vitae rerum. Autem reprehenderit magni. Magni quo et. Quis nihil molestiae. Sunt quos in. Libero corrupti consequatur. Ullam ea rerum. Ut natus assumenda. Vitae at iusto. Facilis et reiciendis. Minima quaerat deserunt. Veritatis aut quia. Voluptas temporibus ut. Et excepturi ut. Nemo expedita sit. Ut dolor laudantium. Est non veniam. Quod libero et. Eius neque aut. Id voluptatem soluta. Quia nulla quo. Aut maxime alias. Quo optio ut. Quibusdam recusandae hic. Rem eum et. Ut eum nemo. Ut excepturi nihil. Sed aut id. Et reiciendis temporibus. Sit delectus commodi. Saepe eum rerum. Qui et accusantium. Distinctio exercitationem molestiae. Dolorum consectetur cumque. Sapiente esse et. Libero impedit explicabo. Qui in ut. Quo ratione autem. Dolorem voluptatem nobis. Expedita doloribus mollitia. Harum tenetur deserunt. Qui similique assumenda. Occaecati adipisci fugiat. Qui exercitationem veritatis. Excepturi dolorum iste. Ipsam cumque vitae. Minus dicta odio. Eos eaque fugiat. A delectus excepturi. Voluptas aut et. Soluta quibusdam at. Officia aspernatur consequatur. Sit asperiores recusandae. Delectus fugit sit. Molestias vel consequatur. Porro aliquam asperiores. Beatae id nihil. Laboriosam soluta dolor. Et est sed. Unde quia minus. Sapiente nam non. Dolor rerum sed. Explicabo asperiores deleniti. Consequatur voluptatem sint. Eum perspiciatis molestiae. Et nihil accusamus. Et aliquam ex. Sed ad atque. Et tempore aperiam. Asperiores aspernatur consequatur."
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
return label
}()
let contentsView: UIView = {
let contentsView = UIView()
contentsView.translatesAutoresizingMaskIntoConstraints = false
return contentsView
}()
let scrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
return scrollView
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.scrollView)
self.scrollView.addSubview(self.contentsView)
self.contentsView.addSubview(self.dummyText)
self.contentsView.addSubview(self.dummyLongText)
NSLayoutConstraint.activate([
self.scrollView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
self.scrollView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
self.scrollView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
self.scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
self.contentsView.topAnchor.constraint(equalTo: self.scrollView.topAnchor),
self.contentsView.leftAnchor.constraint(equalTo: self.scrollView.leftAnchor),
self.contentsView.rightAnchor.constraint(equalTo: self.scrollView.rightAnchor),
self.contentsView.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor),
self.contentsView.widthAnchor.constraint(equalTo: self.view.widthAnchor),
self.dummyText.topAnchor.constraint(equalTo: self.contentsView.topAnchor, constant: 8),
self.dummyText.leftAnchor.constraint(equalTo: self.contentsView.leftAnchor, constant: 16),
self.dummyText.rightAnchor.constraint(equalTo: self.contentsView.rightAnchor, constant: -16),
self.dummyLongText.topAnchor.constraint(equalTo: self.dummyText.bottomAnchor, constant: 16),
self.dummyLongText.leftAnchor.constraint(equalTo: self.contentsView.leftAnchor, constant: 16),
self.dummyLongText.rightAnchor.constraint(equalTo: self.contentsView.rightAnchor, constant: -16),
])
debugPrint(self.dummyLongText.frame.maxY) // 0.0
self.contentsView.layoutSubviews()
self.contentsView.heightAnchor.constraint(equalToConstant: self.dummyLongText.frame.maxY + 16).isActive = true
debugPrint(self.dummyLongText.frame.maxY) // 1079.5
}
}
// Present the self.view controller in the Live self.view window
PlaygroundPage.current.liveView = ViewController()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment