V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firecracker2
V2EX  ›  iOS

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

  •  
  •   firecracker2 · 2015-09-17 16:59:50 +08:00 · 2347 次点击
    这是一个创建于 3391 天前的主题,其中的信息可能已经有所发展或是发生改变。

    碰到这样一种情况,通过 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 )了。百撕不得骑姐啊,有哪位知道其中的问题吗?

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

    我自己的解决方案是删除所有的自动添加的 constraint 然后手工加避免出错。如果你还没有搞定贴个图看看?
    firecracker2
        7
    firecracker2  
    OP
       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
        8
    minsheng  
       2015-09-19 00:59:44 +08:00 via iPhone
    @firecracker2 这个 Technical Note 我也看了。我现在得出的结论是不需要写任何代码实现这个功能,不然就搞错了,所以你还是在 IB 里折腾比较好。 UILabel 的 max width 可能需要设置一下。
    minsheng
        9
    minsheng  
       2015-09-19 01:00:19 +08:00 via iPhone
    哦你 use case 跟我不一样……帮不了,抱歉
    minsheng
        10
    minsheng  
       2015-09-19 01:01:03 +08:00 via iPhone
    不不不,你是需要用户互动之后调整子 view 吗?
    firecracker2
        11
    firecracker2  
    OP
       2015-09-19 08:50:08 +08:00
    @minsheng 是的,我一般习惯根据屏幕尺寸来调整组件的尺寸,对于 scrollview 用 IB 貌似不行,它还是要求你要提前确定尺寸,不然它没法确定 contentsize ,反正先不纠结了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2847 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 13:17 · PVG 21:17 · LAX 05:17 · JFK 08:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.