我有一个自定义UIView,这是我的小组件,可以称之为PlaceholderView。
我的UITableViewCell原型有一个Label和一个PlaceholderView,它位于垂直轴的UIStackView内。
PlaceholderView应该调用一些自定义代码,该代码将转到缓存以检索特定视图,然后将其添加到PlaceholderView的SubView中。
我希望该子视图占据整个PlaceholderView的整个表面。我该怎么做?我试过了,但不确定是否能做到
if (view != null)
{
AddSubview(view);
view.SizeToFit();
}
第二个问题。这些是我要添加的视图,当我在设计时创建它们时,创建一个新的故事板,拖放一个ViewController,然后继续在其上放置其他控件,例如Labels和Button。
如何限制ViewController的整体高度,使其完全固定大小?我知道可以设置模拟指标,也可以设置视图。框架的大小限制了高度。
有没有更好的方法来使这些视图更容易约束?
当前,当我设置这些固定高度值时,如果将UITableView.RowHeigh设置为AutomaticDimension,确实会引起一些奇怪的重叠问题。
答案 0 :(得分:0)
// attaches all sides of the child to its parent view
extension UIView {
func layoutToSuperview() {
guard let view = self.superview else {return}
self.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
self.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
self.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
self.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
}
}
用法:
代替view.SizeToFit()
使用view.layoutToSuperview()
答案 1 :(得分:0)
我希望该子视图占据整个表面的整个表面 PlaceholderView
您可以尝试autolayout:
if (view != null)
{
view.TranslatesAutoresizingMaskIntoConstraints = false;
AddSubview(view);
view.LeadingAnchor.ConstraintEqualTo(this.LeadingAnchor).Active = true;
view.TopAnchor.ConstraintEqualTo(this.TopAnchor).Active = true;
view.TrailingAnchor.ConstraintEqualTo(this.TrailingAnchor).Active = true;
view.BottomAnchor.ConstraintEqualTo(this.BottomAnchor).Active = true;
}
有没有更好的方法来使这些视图更容易约束?
答案也是自动布局。设置控件的高度约束以声明要占用多少空间。有关更多详细信息,请参见此线程:Using Auto Layout in UITableView for dynamic cell layouts & variable row heights。
尽管它是本地oc,但您可以看到其概念。