您好,我正在开发小型 IOS 应用程序,其中我使用带有自动布局的 ScrollView 。在滚动内部我添加了另外两个 View 。我正在使用 IB 和自动布局约束。我以垂直方式在侧面一个接一个地添加两个 View 。我添加了外部约束,例如尾随、前导、顶部、底部空间。我还为两个 View 添加了高度限制。直到这一切都工作正常。
但是我的passengerView有一些动态内容。因此,我想让高度约束大于等于而不是等于。
我的代码是:-
@IBOutlet weak var secondView: UIView!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var passengerView: UIView!
@IBOutlet weak var detailView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let nameLabel = UILabel(frame: CGRect(x: 0, y: (self.name.frame.height * CGFloat(index) + CGFloat(49)), width: 161, height: 32))
let idLabel = UILabel(frame: CGRect(x: 161, y: (self.name.frame.height * CGFloat(index) + CGFloat(49)), width: 161, height: 32))
// nameLabel.text = dsdh?["name"] as? String
nameLabel.layer.borderWidth = 1
nameLabel.layer.borderColor = UIColor.black.cgColor
nameLabel.textAlignment = .center;
self.passengerView.addSubview(nameLabel)
//idLabel.text = dsdh?["document_Type"] as? String
idLabel.layer.borderWidth = 1
idLabel.layer.borderColor = UIColor.black.cgColor
idLabel.textAlignment = .center;
self.passengerView.addSubview(idLabel)
self.secondView.addSubview(self.passengerView)
self.detailView.frame = CGRect(x: self.detailView.frame.origin.x, y: self.detailView.frame.origin.y + CGFloat(32) , width: self.detailView.frame.size.width, height: self.detailView.frame.size.height)
self.secondView.addSubview(self.detailView)
//self.scrollView.addSubview(self.detailView)
self.secondView.frame = CGRect(x: self.secondView.frame.origin.x, y: self.secondView.frame.origin.y , width: self.secondView.frame.size.width, height: self.secondView.frame.size.height + CGFloat(5))
self.scrollView.addSubview(self.secondView)
//self.scrollView.contentSize = CGSize(width: self.scrollView.frame.size.width , height: self.scrollView.frame.size.height + CGFloat(32))
self.scrollView.frame = CGRect(x: self.scrollView.frame.origin.x, y: self.scrollView.frame.origin.y , width: self.scrollView.frame.size.width, height: self.scrollView.frame.size.height + CGFloat(0))
self.view.frame = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y , width: self.view.frame.size.width, height: self.view.frame.size.height + CGFloat(0))
}
最佳答案
最好的方法如下:
- 实现
UIScrollView
这是对Leading, Trailing, Top, Bottom
的约束主要 View 的限制。 - 添加
UIView
到UIScrollView
并将其限制为Leading, Trailing, Top, Bottom
您的UIScrollView
。重要的是还要限制这个UIView's
宽度到您的主视图,而不是您的 ScrollView !这样UIView
将为您服务Content View
对于UIScrollView
。 如果您在 Interface Builder 中执行此操作,则此步骤是强制性的! - 添加
UIStackView
给您Content View
(上一步的 View )并将其限制为Leading, Trailing, Top, Bottom
Content View
的。 - 添加您所有的
UILabels
,你的Detail View
,QR Code View
和Passenger View
作为 child 对此UIStackView
. - 因为您只想要您的
Passenger View
要具有动态高度,您可以设置UIStackView's
轴至Vertical
和Content Mode
至Fill
。然后,您将为UIStackView
的所有子代提供高度。 除了Passenger View
。
这样Content Size
您的UIScrollView
将根据 UIStackView
的高度进行调整和 UIStackView
的高度将根据 Passenger View
所需的高度进行调整.
关于ios - swift 8 iOS 数据在动态添加数据时在 ScrollView 中被裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42312149/