通过 storyboard 搭建的界面,修改一个 scrollview 中的子 view 的 frame 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firecracker2
V2EX    iOS

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

  •  
  •   firecracker2 2015 年 9 月 17 日 2769 次点击
    这是一个创建于 3873 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    我自己的解决方案是删除所有的自动添加的 constraint 然后手工加避免出错。如果你还没有搞定贴个图看看?
    firecracker2
        7
    firecracker2  
    OP
       2015 年 9 月 19 日
    @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 年 9 月 19 日 via iPhone
    @firecracker2 这个 Technical Note 我也看了。我现在得出的结论是不需要写任何代码实现这个功能,不然就搞错了,所以你还是在 IB 里折腾比较好。 UILabel 的 max width 可能需要设置一下。
    minsheng
        9
    minsheng  
       2015 年 9 月 19 日 via iPhone
    哦你 use case 跟我不一样……帮不了,抱歉
    minsheng
        10
    minsheng  
       2015 年 9 月 19 日 via iPhone
    不不不,你是需要用户互动之后调整子 view 吗?
    firecracker2
        11
    firecracker2  
    OP
       2015 年 9 月 19 日
    @minsheng 是的,我一般习惯根据屏幕尺寸来调整组件的尺寸,对于 scrollview 用 IB 貌似不行,它还是要求你要提前确定尺寸,不然它没法确定 contentsize ,反正先不纠结了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2663 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:16 PVG 15:16 LAX 00:16 JFK 03:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86