通过 storyboard 搭建的界面,修改一个 scrollview 中的子 view 的 frame 的问题

2015-09-17 16:59:50 +08:00
 firecracker2

碰到这样一种情况,通过 storyboard 搭建的界面,在 controller 的根 view 里添加一个 scrollview 并通过约束使它占满整个屏幕,然后向 scrollview 里面添加一个子 view ,把 scrollview 里的子 view 的 size 设置为(100, 100 )。之后在- (void )viewDidLayoutSubviews 修改 scrollview 里的子 view 的 frame ,比如 size 设置到屏幕大小,但是不起作用。我发现在- (void )viewDidLayoutSubviews 方法后, scrollview 的- (void )layoutSubviews 会调用,但在该方法中 scrollview 里的子 view 的 size 已经变成(100, 100 )了。百撕不得骑姐啊,有哪位知道其中的问题吗?

2319 次点击
所在节点    iOS
11 条回复
firecracker2
2015-09-17 17:11:54 +08:00
补充一点,我在 viewDidLoad 方法中通过代码构建了一个 view 对象并加到了 scrollview 中,也把 size 设为(100, 100 ),同样在 viewDidLayoutSubviews 方法中将该 view 的 size 重设为屏幕大小,针对这个 view 的设置是生效的,但通过界面添加的 scrollview 的子 view 却还是在 storyboard 中设置的尺寸。
minsheng
2015-09-17 23:24:35 +08:00
最近也被 ScrollView 和 Auto Layout 玩残了。同学你有没有给子界面加限制?试试删掉高宽限制。
minsheng
2015-09-17 23:25:22 +08:00
装什么逼…… constraint 不说我翻译什么中文……
firecracker2
2015-09-18 12:28:56 +08:00
@minsheng 只给 scrollview 加了占满整个屏幕的约束,其他的约束没加过
firecracker2
2015-09-18 12:29:49 +08:00
什么意思,怎么装逼了,你能把意思表达清楚吗,后半句都不知道你在说什么
minsheng
2015-09-18 23:38:11 +08:00
@firecracker2 我说我装逼,前后两句的主语都是我,所以你看不懂,抱歉。我的意思是我不写 constraint 非要尝试翻译干什么。

我自己的解决方案是删除所有的自动添加的 constraint 然后手工加避免出错。如果你还没有搞定贴个图看看?
firecracker2
2015-09-19 00:11:14 +08:00
@minsheng 理解错了,感觉好像在说我,所以有点莫名其妙。对于通过 storyboard 搭建的子 view ,我在 viewDidLoad 里尝试过删除所有的约束,但效果还是一样的,这个也不知道为什么了,想着它的行为应该和通过代码生成的子 view 一样,但好像还是有些地方不太了解。另外文档里还专门介绍了下 scrollview 和 autolayouthttps://developer.apple.com/library/prerelease/ios/technotes/tn2154/_index.html#//apple_ref/doc/uid/DTS40013309 ,主要是要给子 view 的宽高和边界同时加约束,然后系统根据这个去算 contentSize ,今天看到的,分享下。
minsheng
2015-09-19 00:59:44 +08:00
@firecracker2 这个 Technical Note 我也看了。我现在得出的结论是不需要写任何代码实现这个功能,不然就搞错了,所以你还是在 IB 里折腾比较好。 UILabel 的 max width 可能需要设置一下。
minsheng
2015-09-19 01:00:19 +08:00
哦你 use case 跟我不一样……帮不了,抱歉
minsheng
2015-09-19 01:01:03 +08:00
不不不,你是需要用户互动之后调整子 view 吗?
firecracker2
2015-09-19 08:50:08 +08:00
@minsheng 是的,我一般习惯根据屏幕尺寸来调整组件的尺寸,对于 scrollview 用 IB 貌似不行,它还是要求你要提前确定尺寸,不然它没法确定 contentsize ,反正先不纠结了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221498

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX