小编use*_*524的帖子

如何使用Autolayout在我的UIScrollview上设置约束?

我花了两天时间尝试混合和纯Autolayout方法的各种解决方案,以实现自动布局之前的简单滚动视图设置,现在它已经正式 - 我必须太愚蠢.我主要是在Storyboard中设置它(好吧,它就是这样).

所以这是我的求助.

Viewtree:

UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton
Run Code Online (Sandbox Code Playgroud)

按钮应该水平滚动(从左到右,反之亦然).有人可以让我知道如何设置的约束来实现这个使用纯自动布局???

-

我尝试过混合方法,如下所示:

UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton
Run Code Online (Sandbox Code Playgroud)

...并根据Apple的TechNote contentviewtranslatesAutoresizingMaskIntoConstraints设置和设置设置固定的宽度和高度限制.使用约束设置按钮和滚动视图.这让滚动视图滚动(yay)但是唉,它滚动得太远了!据我所知,滚动宽度在某种程度上比我设置的内容视图加倍了??? !!! ???

我尝试了纯自动布局方法,包括contentview有无.所有观点都是translatesAutoresizingMaskIntoConstraints=NO,除了self.view.按钮具有固定的宽度/高度约束,并固定到滚动视图的所有四个边缘.什么都不滚动.

所以我完全不知道为什么我不能让它正常工作.非常感谢任何帮助,如果您需要任何其他信息,请询问!

更新截图与解决方案 - buttonZ约束:

在此输入图像描述

编辑@ Jamie Forrest 所以解决方案结果是最后一个按钮的错误尾随约束.而不是6441,我设置的值是负数,-6441.棘手的是,在storyboard中设置值时,Pin工具栏中有两个选项:

在此输入图像描述

当前画布值为负(导致无滚动),下面的选项为正(激活滚动).这意味着我不是傻瓜,但我猜至少半盲.虽然,为了我的辩护,XCode没有为"错误"设置显示错误,这有点令人不安吗?

再次编辑 现在这很有趣......将尾随值从-6441(无滚动)更改为6441启用滚动.但我的老朋友"太多内容化"又回来了,导致内容大小是应有的两倍!获取正确内容滚动的解决方案是将尾随约束设置为ZERO!当在Storyboard中工作但是查看@Infinity James的代码时,这并不明显,它应该是什么.

storyboard uiscrollview ios autolayout

173
推荐指数
6
解决办法
9万
查看次数

以编程方式设置约束不同于在IB中设置约束?

我是iOS中Auto Layout的新手.我原则上非常喜欢这个概念,但它让我疯狂地试图完成最简单的事情.我怀疑我仍然缺少一些简单的基本原则.我正在尝试通过实践来学习并在应用程序中实际使用它之前获得基础知识,因此我创建了非常简单的测试项目.这是一个简单的,它不会按预期工作.首先是有效的部分.在IB中,我添加一个View来填充整个viewcontroller,XCode自动将约束设置为Top/Bottom/Leading/Trailing,将Space设置为0.完成IB后,它按预期工作:

在此输入图像描述

旋转到

在此输入图像描述

大!

现在我想在代码中做同样的事情:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];

redView.translatesAutoresizingMaskIntoConstraints = NO;

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
}
Run Code Online (Sandbox Code Playgroud)

这是除了单视图应用程序的默认代码之外的所有代码.

当我运行上面的代码时,尝试以编程方式镜像我用IB获得的相同内容,我在轮换后得到这个:

在此输入图像描述

为什么相同的约束会导致不同的结果呢?这可能是一件非常简单而又令人尴尬的事情.救命!!!

uiview ios autolayout

9
推荐指数
2
解决办法
2万
查看次数

UIPageViewController - 第一次旋转将视图重置为初始页面?

我试图了解Apple的基于页面的应用程序的默认模板.该模板显示了一种日历,每年的每个月都有一页.

在没有任何更改的情况下编译模板时,我注意到一些奇怪的东西 当应用程序启动时,它以纵向模式显示,并且 - 在翻阅某些页面(例如,到6月)后 - 您更改旋转,它以横向模式重新加载显示两个页面,但是从1月开始.但这只发生一次.在随后的方向更改中,它然后跳转到正确的"currentViewController".

这个代码似乎来自RootViewController文件,具体来说

UIViewController *currentViewController = self.pageViewController.viewControllers[0];
Run Code Online (Sandbox Code Playgroud)

坦率地说,第一次定位改变似乎被忽略了.

我想知道为什么?

xcode uipageviewcontroller ios6

3
推荐指数
1
解决办法
2503
查看次数