【问题标题】:embedding navbar/tabbar breaks constraints of a normally functional view嵌入导航栏/标签栏打破了正常功能视图的约束
【发布时间】:2014-12-01 00:38:17
【问题描述】:

我有一个简单的

正常工作的UIViewController:

  1. view.backgroundColor
  2. UITextView
  3. UIView(作为底部和文本视图之间的间隔)
  4. 将 textview 固定到视图的约束,该视图又固定到底部布局指南
  5. 点击 textview 会加载键盘,并且间隔视图会相应扩展以避免键盘与我的 textview 重叠

...
//var memoArea = UITextView(frame: CGRectMake(20, 291, 275, 225))
memoArea.addConstraint(NSLayoutConstraint(item: memoArea, attribute: .Width, relatedBy: .Equal,
   toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 275.0))

memoArea.addConstraint(NSLayoutConstraint(item: memoArea, attribute: .Height, relatedBy: .Equal,
    toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 225.0))

self.view.addConstraint(NSLayoutConstraint(item: memoArea, attribute: .Leading, relatedBy: .Equal,
    toItem: self.view, attribute: .Leading, multiplier: 1.0, constant: 20.0))

// var spacer:UIView = UIView(frame: CGRectMake(84, 518, 160, 6))
spacer.addConstraint(NSLayoutConstraint(item: spacer, attribute: .Width, relatedBy: .Equal,
   toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 160.0))

spacer.addConstraint(NSLayoutConstraint(item: spacer, attribute: .Height, relatedBy: .Equal,
    toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 6.0))

self.view.addConstraint(NSLayoutConstraint(item: spacer, attribute: .Leading, relatedBy: .Equal,
    toItem: self.view, attribute: .Leading, multiplier: 1.0, constant: 84.0))

view.setTranslatesAutoresizingMaskIntoConstraints(false)
spacer.setTranslatesAutoresizingMaskIntoConstraints(false)
memoArea.setTranslatesAutoresizingMaskIntoConstraints(false)
...

...
func updateBottomLayoutConstraintWithNotification(notification: NSNotification) {
let userInfo = notification.userInfo!
let animationDuration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as NSNumber).doubleValue
let keyboardEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
let convertedKeyboardEndFrame = view.convertRect(keyboardEndFrame, fromView: view.window)
let rawAnimationCurve = (notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as NSNumber).unsignedIntValue << 16
let animationCurve = UIViewAnimationOptions.init(UInt(rawAnimationCurve))

let frame = self.tabBarController?.tabBar.frame
let height = frame?.size.height
spacerToBottom.constant = CGRectGetMaxY(view.bounds) - CGRectGetMinY(convertedKeyboardEndFrame) - height! - 5

UIView.animateWithDuration(animationDuration, delay: 0.0, options: .BeginFromCurrentState | animationCurve, animations: {
self.view.layoutIfNeeded()
}, completion: nil)
...

但是,在添加 标签栏导航栏到具有正常工作约束的视图之后,

3 件事中断:

  1. 背景不再呈现,产生黑色背景
  2. textview 不注册点击,即键盘不加载
  3. 视图忽略底部布局指南。它只是将我的对象向上移动到它们的 .Top 约束允许它们的高度。 textview 和 uiview 之间的约束仍然得到尊重。

【问题讨论】:

    标签: swift ios8 autolayout constraints xcode6.1


    【解决方案1】:

    注释掉 view.setTranslatesAutoresizingMaskIntoConstraints(false) 消除了所有错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      相关资源
      最近更新 更多