Xamarin iOS代码后台设置视图Constant属性报错,如何解决?
解决Xamarin.iOS中UIView无Constant属性的报错
嘿,这个问题我太熟了!你之所以会碰到这个报错,是因为搞混了操作对象——Constant根本不是UIView的属性,它属于**布局约束(NSLayoutConstraint)**哦!
错误根源
你之前应该是直接对着UIView实例去设置.Constant,但这个属性只存在于控制视图布局的NSLayoutConstraint对象上,所以编译器才会提示找不到这个定义。
正确解决步骤
要实现点击按钮显示/隐藏视图的效果,你需要先把控制视图宽度的约束保存为一个可访问的变量,再通过修改这个约束的Constant来实现:
保存宽度约束的引用
在类的级别声明一个约束变量,然后在创建视图和约束的时候,把宽度约束赋值给它:// 在你的ViewController类里声明变量 private NSLayoutConstraint _targetViewWidthConstraint; public override void ViewDidLoad() { base.ViewDidLoad(); // 创建你的目标视图 var targetView = new UIView { BackgroundColor = UIColor.Red, TranslatesAutoresizingMaskIntoConstraints = false }; View.AddSubview(targetView); // 创建并激活宽度约束,同时保存引用 _targetViewWidthConstraint = targetView.WidthAnchor.ConstraintEqualTo(100); _targetViewWidthConstraint.Active = true; // 别忘了添加其他必要的约束(比如上下左右的约束) targetView.TopAnchor.ConstraintEqualTo(View.TopAnchor, 50).Active = true; targetView.LeadingAnchor.ConstraintEqualTo(View.LeadingAnchor, 20).Active = true; }隐藏视图时修改约束
应用启动后要隐藏视图,直接修改这个约束的Constant:// 在合适的时机(比如ViewDidAppear)隐藏视图 public override void ViewDidAppear(bool animated) { base.ViewDidAppear(animated); _targetViewWidthConstraint.Constant = -100; View.LayoutIfNeeded(); // 触发布局更新 }点击按钮显示视图
给按钮绑定点击事件,在事件里修改约束的Constant为你需要的值:private void ShowViewButton_Clicked(object sender, EventArgs e) { _targetViewWidthConstraint.Constant = 100; // 恢复原来的宽度,或者设为0/其他值 View.LayoutIfNeeded(); // 必须调用这个方法让布局生效 }
额外提示(如果用Storyboard/XIB创建约束)
要是你是通过可视化界面创建的约束,只需要在ViewController里给这个宽度约束添加一个IBOutlet引用,然后同样操作这个IBOutlet变量的Constant属性就可以了,步骤和上面一致。
内容的提问来源于stack exchange,提问作者Vinod
相关产品推荐
相关产品推荐

