Superview中UIPageControl的编程垂直对齐使用NSLayoutConstraint

Posted

技术标签:

【中文标题】Superview中UIPageControl的编程垂直对齐使用NSLayoutConstraint【英文标题】:Programmatic Vertical Alignment of UIPageControl in Superview using NSLayoutConstraint 【发布时间】:2013-11-06 21:15:18 【问题描述】:

到目前为止,我能够避免使用自动布局,因此为(可能)愚蠢的问题道歉。

我有一个正在以编程方式构建的 ViewController(例如,没有 IB)。 我有一个 UIPageControl 对象,它位于 viewController 视图的视图层次结构中(例如,addSubview:) 相反,我需要将 UIPageControl 对象与 UIViewController 主视图的底部边缘对齐。 我希望 UIPageControl 水平居中,但距离底部边缘 20-40 像素。

这是我创建并显示 UIPageControl 的一些示例代码,但根本不在正确的位置。

self.pageControl = [[UIPageControl alloc] init];
self.pageControl.numberOfPages = ...;
self.pageControl.otherAttributes = ...;
[self.view addSubview:[self pageControl]];

UIPageControl *pageControl = [self pageControl];
UIView *view = [self view];
NSDictionary *constaintDictionary = NSDictionaryOfVariableBindings(view, pageControl);


[self.view addConstraint:[NSLayoutConstraint constraintWithItem:pageControl
                                                     attribute:NSLayoutAttributeCenterX
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:self.view
                                                     attribute:NSLayoutAttributeCenterX
                                                    multiplier:1
                                                      constant:0]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[pageControl]-20-[view]"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:constaintDictionary]];

就像我说的,我对自动布局真的很陌生,所以我不确定我是否正确地实现了这些方法。

感谢您提前提供的帮助。

【问题讨论】:

【参考方案1】:

好的,我想出了怎么做。花了很多时间,但在我再次阅读Visual Format Language 文档后,我想出了这个:

UIPageControl *pageControl = [self pageControl];

[pageControl setTranslatesAutoresizingMaskIntoConstraints:NO];

[self.view addConstraints:[NSLayoutConstraint
                           constraintsWithVisualFormat:@"H:|-0-[pageControl]-0-|"
                           options:0
                           metrics:nil
                           views:NSDictionaryOfVariableBindings(pageControl)]];
[self.view addConstraints:[NSLayoutConstraint
                           constraintsWithVisualFormat:@"V:[pageControl]-40-|"
                           options:0
                           metrics:nil
                           views:NSDictionaryOfVariableBindings(pageControl)]];

【讨论】:

以上是关于Superview中UIPageControl的编程垂直对齐使用NSLayoutConstraint的主要内容,如果未能解决你的问题,请参考以下文章

能够在 UIpageControl 中选择对象

UIpageControl 的使用

如何在 iOS 4 中调整 UIPageControl 的指标?

检测 UIPageControl 页面变化

如何复制这个 UIPageControl 外观?

如何在我的应用程序中使用 UIPageControl?