在我的viewcontroller中,我添加了一个带有xib的子视图,我在xib中设置了autolayout,但是当我将视图添加到视图控制器时它不起作用

时间:2015-06-06 08:01:15

标签: ios objective-c xcode swift xib

首先我有一个名为FindFriendHeadPublish.h的自定义视图,它包含一个xib文件,如下所示,我设置了autolayout,视图是OC enter image description here

我的名为PreviewViewController.swift的视图控制器也有一个xib 我将FindFriendHeadPublish视图添加到视图控制器,但FindFriendHeadPublish中的autolayout不起作用

    override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "我的卡片预览"
    var addpreviewView = NSBundle.mainBundle().loadNibNamed("FindFriendHeadPublish", owner: nil, options: nil)
    var previewView = addpreviewView.last as! FindFriendHeadPublish
    previewView.setTranslatesAutoresizingMaskIntoConstraints(false);
    GetUserInfoInterface.getUserInfoWithFUid(UserInfoSaveUtil.getUserInfo().userid, withBlock: { (userInfo:GetUserInfoVo!  , error:NSError! ) -> Void in

})

self.scrollView.contentSize = CGSizeMake(320, 640)
self.scrollView.addSubview(previewView)

}

我已经检查了一些其他问题,但我找不到解决方案,任何人都可以提供帮助,谢谢

此外,自定义视图在另一个使用OC

写入的视图控制器中运行良好

以上代码的工作原理如下 enter image description here

2 个答案:

答案 0 :(得分:1)

首先将Hieght Constraint添加到nib中的previewView 然后在previewView.setTranslatesAutoresizingMaskIntoConstraints(false);

之后添加以下代码
var constraints: NSMutableArray = NSMutableArray()
constraints.addObject(NSLayoutConstraint(item: previewView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.scrollView, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0.0))
constraints.addObject(NSLayoutConstraint(item: previewView, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.scrollView, attribute: NSLayoutAttribute.Left, multiplier: 1.0, constant: 0.0))
constraints.addObject(NSLayoutConstraint(item: previewView, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.scrollView, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: 0.0))
self.scrollView.addConstraints(constraints as [AnyObject])

希望有所帮助。

答案 1 :(得分:0)

您没有为previewView及其超级视图设置约束,如果视图不在一个文件中,则您无法在IB中进行约束。

previewView.setTranslatesAutoresizingMaskIntoConstraints(false);
let viewBindingsDict = ["previewView":previewView, "view":self.view]
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[previewView(==view)]", options: nil, metrics: nil, views: viewBindingsDict))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[previewView]", options: nil, metrics: nil, views: viewBindingsDict))

此示例将previewView左上角设置为控制器视图的宽度。 一个很好的教程:http://www.thinkandbuild.it/learn-to-love-auto-layout-programmatically/

建议在scrollview中仅使用一个视图,并将其用作其他视图的容器。 如果你加载一个笔尖并将所有者设置为自己