- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 subview 添加到父 View ,我想约束 subview 。但它什么都不做。 subview 在父 View 上全屏添加。请帮助我,出了什么问题?
这是我的代码:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
setupConstraints()
}
func setupConstraints(){
heightConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 80)
bottomConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view.superview!, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 30)
widthConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: view.superview!, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0)
view.setTranslatesAutoresizingMaskIntoConstraints(false)
view.superview!.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addConstraint(heightConstraint!)
view.addConstraint(widthConstraint!)
view.addConstraint(bottomConstraint!)
}
最佳答案
问题是您的约束不明确(未确定)。没有足够的信息知道将您的 view
放在哪里。
必须知道四个信息:
* x position
* y position
* width
* height
查看您的约束,并考虑每个约束确定的内容:
heightConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 80)
那是高度。
bottomConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view.superview!, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 30)
这是 y 位置。
widthConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: view.superview!, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0)
那是宽度。
糟糕! x位置呢?
您的代码的另一个问题可能是这一行:
view.superview!.setTranslatesAutoresizingMaskIntoConstraints(false)
您删除了 view.superview
的自动生成的约束,但您没有用任何新约束替换它们。因此,此时它的配置也可能不明确(除非它已经具有我们不知道的一整套约束,但在那种情况下,该行是不必要的)。
在我的书中,我提供了一些实用方法的代码来帮助追踪这种事情:
extension NSLayoutConstraint {
class func reportAmbiguity (var v:UIView?) {
if v == nil {
v = UIApplication.sharedApplication().keyWindow
}
for vv in v!.subviews as! [UIView] {
println("\(vv) \(vv.hasAmbiguousLayout())")
if vv.subviews.count > 0 {
self.reportAmbiguity(vv)
}
}
}
class func listConstraints (var v:UIView?) {
if v == nil {
v = UIApplication.sharedApplication().keyWindow
}
for vv in v!.subviews as! [UIView] {
let arr1 = vv.constraintsAffectingLayoutForAxis(.Horizontal)
let arr2 = vv.constraintsAffectingLayoutForAxis(.Vertical)
NSLog("\n\n%@\nH: %@\nV:%@", vv, arr1, arr2);
if vv.subviews.count > 0 {
self.listConstraints(vv)
}
}
}
}
如果你运行NSLayoutConstraint.reportAmbiguity(view.superview!)
,最好是在viewDidLayoutSubviews
中,在你的view
被注入(inject)之后在 View 层次结构中,您会发现 view
报告不明确。这就是您没有看到预期内容的原因。
关于swift - 对 superview 的约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384693/
我想为我的 UILabel 实现与 iOS 7 的新 iTunes 远程更新相同的效果。 如果您查看此屏幕: (右边的那个)你会注意到 UILabel 文本颜色是背景模糊的专辑封面,没有黑色 mask
这里有两个组件,UIView *superView 和 UILabel *label。 label 是 superView 的 subview 。问题是当我将标签移出其 super View 时,标签
我正在开发一个应用程序,其中我的所有 UIViewControllers 具有通用的 UITableView 结构。所以我创建了一个包含通用结构的 UITableView 子类,然后我将这个 View
我有一个简单的 iPad 应用程序,其中包含以下 View 层: BaseView(覆盖整个可用区域)。 SquareView(覆盖 100x100px 区域)。 SquareView 作为 subv
我正在查看 SnapKit 文档:http://snapkit.io/docs/ 如果您转到使用部分,它会显示以下示例代码: let box = UIView() superview.addSubv
我正在尝试向页面添加一个新的 subview ,这样除了它本身之外的所有内容都显示为灰色。但是,我是从屏幕的 subview 中调用它的。要将其取出,我必须执行以下操作: [self.view.sup
我正在开发一个小游戏,我想在 super View 上做一些功能.. super View 是一个自定义类,即 Reflection View..并希望在用户移动 View 时隐藏反射.. 这是我所做
ScrollView 有一些 SubViews.... ScrollView 包含它的预定义手势(Pan) 和我的自定义手势(Pan) 以及同时识别它... SubViews 还包含自定义 Pan G
我有一个videPlayerView,它上面有ContainerView来显示activityIndicatorView。当我从单元格内的 collectionView 中选择一个项目时, Vie
我有一个与其他子托管对象处于“对多”关系的托管对象。当我删除子管理对象之一时,主管理对象上表示与子管理对象关系的数组将被清空。 下面是我获取 subManaged 对象并将其删除时发生的情况的日志。我
基本上,我希望能够单击下图中的所有 subview ... 我希望能够点击 View B 的 subview ,但 View A 挡住了,即使 View A subview 没有阻挡下面的 View
我正在创建 UIView 的子类以在项目中使用,并将处理主视图上的触摸。我希望当拖动触摸(在主视图上)并接触特殊的 UIView 时,它们会更改其背景颜色。使用 UIView 的默认“touchesM
我在 UIView 中有一个 UIButton,有两个约束。这两个约束都是在 Interface Builder 中设置的,以便 UIButton 在其 super View 中垂直和水平居中。 我想
Collection View Cell 的子类化方式如下: 我在 Collection View 中有这个布局。在创建每个按钮时,我调用以下代码: [cell.imageButton add
我正在使用自动布局。我有一个 UIView,它位于距 super View 中心 20 像素的边距处。 现在我已经将顶部空间分配给了我在 iPhone 6+ Xib 中创建的 super View 。
这个问题在这里已经有了答案: Xcode 6 beta 7: storyboard adds extra space on right and left sides (1 个回答) 关闭 8 年前
我在屏幕上有一个从 XIB 加载的 subview ,我需要在其父 View 上禁用触摸事件ONLY,同时最终不触摸 subview 。我该怎么做?另外,我使用的是 iOS。 谢谢! 最佳答案 这就是
我有一个 UICollectionView,它使用 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 来确定用户何时滚动到底部。 我的 UI
我试图将点击事件传递给 super View ,但处理长按事件。我已将 LongPressGestureRecognizer 添加到顶 View ,但点击事件未传递到 super View 。我尝试了
我将 subview 添加到父 View ,我想约束 subview 。但它什么都不做。 subview 在父 View 上全屏添加。请帮助我,出了什么问题? 这是我的代码: override f
我是一名优秀的程序员,十分优秀!