firecracker2
V2EX  ›  iOS

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

  •  
  •   firecracker2 · Sep 17, 2015 · 2819 views
    This topic created in 3894 days ago, the information mentioned may be changed or developed.

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

    我自己的解决方案是删除所有的自动添加的 constraint 然后手工加避免出错。如果你还没有搞定贴个图看看?
    firecracker2
        7
    firecracker2  
    OP
       Sep 19, 2015
    @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  
       Sep 19, 2015 via iPhone
    @firecracker2 这个 Technical Note 我也看了。我现在得出的结论是不需要写任何代码实现这个功能,不然就搞错了,所以你还是在 IB 里折腾比较好。 UILabel 的 max width 可能需要设置一下。
    minsheng
        9
    minsheng  
       Sep 19, 2015 via iPhone
    哦你 use case 跟我不一样……帮不了,抱歉
    minsheng
        10
    minsheng  
       Sep 19, 2015 via iPhone
    不不不,你是需要用户互动之后调整子 view 吗?
    firecracker2
        11
    firecracker2  
    OP
       Sep 19, 2015
    @minsheng 是的,我一般习惯根据屏幕尺寸来调整组件的尺寸,对于 scrollview 用 IB 貌似不行,它还是要求你要提前确定尺寸,不然它没法确定 contentsize ,反正先不纠结了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1043 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 23:31 · PVG 07:31 · LAX 16:31 · JFK 19:31
    ♥ Do have faith in what you're doing.