ハマったはずなのに動いてる
すごい長い文章はfakerで作成
https://github.com/faker-ruby/faker/blob/master/doc/default/lorem.md
ハマったはずなのに動いてる
すごい長い文章はfakerで作成
https://github.com/faker-ruby/faker/blob/master/doc/default/lorem.md
//: 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() |