UIScrollView 右侧的 Autolayout Pin 视图

Posted

技术标签:

【中文标题】UIScrollView 右侧的 Autolayout Pin 视图【英文标题】:Autolayout Pin view from right of UIScrollView 【发布时间】:2015-03-30 13:41:47 【问题描述】:

我已将滚动视图固定在 IB 的左上右下,它工作正常。

我想在滚动视图中正确固定从笔尖加载的 UIView。

但它不起作用。

将我的视图添加到滚动视图,

当我将视图添加到 UIView 时,它可以正常工作,但不能在 ScrollView 中工作。 这是我的代码。

   var constY = NSLayoutConstraint(item: circularView!, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.IBscrollView, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
        self.IBscrollView.addConstraint(constY)

        var constW = NSLayoutConstraint(item: circularView!, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth/2.5)
        circularView?.addConstraint(constW)
        //view.addConstraint(constW) also works

        var constH = NSLayoutConstraint(item: circularView!, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth/2.5)
        circularView?.addConstraint(constH)

        var rightPin = NSLayoutConstraint.constraintsWithVisualFormat("H:|-[myView]-40-|", options: nil, metrics: nil, views: dCircularViews)
        self.IBscrollView.addConstraints(rightPin)

【问题讨论】:

【参考方案1】:

尝试以下方法,而不是第一个约束:

var leadingConst = NSLayoutConstraint(item: circularView!, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.IBscrollView, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
self.IBscrollView.addConstraint(leadingConst)

您可以保持所有其他约束不变。

【讨论】:

不,兄弟,它不适合我。我认为使用滚动视图有一些问题。【参考方案2】:

我不完全确定您所说的“不起作用”是什么意思,但是当您说 pin 时,这是否意味着您不想在滚动 IBscrollView 时移动视图?在这种情况下,我建议查看此文档: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/AutoLayoutbyExample/AutoLayoutbyExample.html

如果您希望滚动视图滚动而不滚动 - 当使用 Autolayout 和 UIScrollView 时,您必须确保 NSLayoutConstraints,来自 UIScrollView 内的视图,连接到顶部和底部的UIScrollView,因此它可以正确设置其contentSize。这里谈到:http://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/

【讨论】:

【参考方案3】:

在所有方向设置自动布局约束后,尝试在 scrollView 中添加 UIView,名称为 contentView。在 viewDidLoad 方法中为 contentView 添加自动布局。使用 contentView 作为基础来添加其他项目,例如标签和按钮。设置与 contentView 相关的自动布局约束。目标 c 代码

-(void)ViewDidLoad
 
     [super viewDidLoad];
     NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.contentView
                                                              attribute:NSLayoutAttributeLeading
                                                              relatedBy:0
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeLeft
                                                             multiplier:1.0
                                                               constant:0];
    [self.view addConstraint:leftConstraint];

    NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:self.contentView
                                                               attribute:NSLayoutAttributeTrailing
                                                               relatedBy:0
                                                                  toItem:self.view
                                                               attribute:NSLayoutAttributeRight
                                                              multiplier:1.0
                                                                constant:0];
   [self.view addConstraint:rightConstraint];
  

查看本教程以获得完整指南:http://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/

【讨论】:

以上是关于UIScrollView 右侧的 Autolayout Pin 视图的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 右侧的 Autolayout Pin 视图

是否可以将 UIScrollView 指示器从右侧移动到左侧?

启动使用 UIScrollView 的 UIPageControl 的 App 时,如何将默认页面设置在右侧而不是左侧(反向)?

分页 UIScrollView 内的 UIScrollView

UIScrollView 在动画期间被剪辑

UIScrollView 错误