[英]Move button after adding subview
在下面的注释中编辑了以下内容-使用约束来控制布局。
我试图通过按钮添加/删除在情节提要中设置的视图控制器。 该按钮和任何以前添加的视图应按照以下视觉格式字符串在屏幕上向下移动:
可选(“ V:| -50- [viewXIB0(100)]-30- [buttonKey]”)
可选(“ V:| -50- [viewXIB1(100)]-30- [viewXIB0(100)]-30- [buttonKey]”)
可选(“ V:| -50- [viewXIB2(100)]-30- [viewXIB1(100)]-30- [viewXIB0(100)]-30- [buttonKey]”)
(这是输入到NSLayoutConstraint.constraintsWithVisualFormat中的视觉格式字符串的println输出。)
已经有了以下注释,每次按下该按钮时,该视图的确出现,并正确向下移动页面。 但是,超级视图和顶视图之间的间隔为零-没有边距。 添加其他视图时,也会出现类似的问题-每个视图都被隐藏在间距下方。 底部间距大于所需的30。并且,在插入几次后,甚至更奇怪的东西也开始朝屏幕顶部发生。
在构建或运行时没有约束错误。 当我的计算机超慢运行时,我确实看到它短暂地出现在正确的位置,然后捕捉到屏幕顶部。 我想我也能听到它在嘲笑我,但这可能是个玩笑。 在两个View Controller中都启用了自动布局。
我用来通过触摸按钮内部添加视图的完整方法是:
@IBAction func addVCBenj(sender: AnyObject)
{
// remove original constraint from button
if (topConstraintBenjV != nil)
{
view.removeConstraint(topConstraintBenjV)
topConstraintBenjV = nil
println("addVCBen constraints removed")
}
// remove previous constraints as views are added
if (constraintV != nil)
{
view.removeConstraints(constraintV!)
println("removed")
}
// instantiate add add the view within the storyboard VC
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myVC = storyboard.instantiateViewControllerWithIdentifier("VCtoInsert") as UIViewController
view.addSubview(myVC.view)
// create and add a unique key for each view in the dictionary of views
viewsDictionaryKey = "\(viewsDictionaryString)\(viewsDictionaryCounter)"
viewsDictionaryCounter += 1
viewsDictionary[viewsDictionaryKey!] = myVC.view
// create the visual format string for layout
suffixVisualFormatString_V = "[" + viewsDictionaryKey! + "(100)]-30-" + suffixVisualFormatString_V
visualFormatString_V = prefixVisualFormatString_V + suffixVisualFormatString_V
println(visualFormatString_V)
// create and add horizontal and vertical constraints
let constraintH = NSLayoutConstraint.constraintsWithVisualFormat("H:[\(viewsDictionaryKey!)(>=300)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary)
myVC.view.setTranslatesAutoresizingMaskIntoConstraints(false)
constraintV = NSLayoutConstraint.constraintsWithVisualFormat(visualFormatString_V!, options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary)
self.view.addConstraints(constraintV!)
self.view.addConstraints(constraintH)
}
我看过WWDC视频,并搜索了类似的问题,但是实际上,我现在很困惑,我什至不知道要搜索什么。
根据BooRanger的评论,通过在顶部和底部约束中添加IBOutlet,可以在每次按下按钮时操纵视图。 但是,归根结底,集合视图是添加和删除视图的简便方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.