我想创建一个垂直 UISlider
并将其完全适合现有的容器 View ,该容器 View 的大小和位置来自 .xib
文件使用 autoLayout
.但我根本无法让它工作,我用谷歌搜索了我的手指。
我得到的最接近的结果创建了一个太长并超出屏幕的 slider 。
我是不是把代码放错地方了?
我将我的代码放在 "layOutSubviews"
中
一些兴趣点:
1.根据 Apple 的文档, View 的“框架”在转换后无效,不应设置。
2. slider 的框架在转换之前设置为 future 父级的尺寸(交换了 x 和 y)。
3.转换后的 View 似乎在转换前的坐标系中保持其边界。即在 90 度变换之后,变换后 View 边界的宽度和高度似乎被交换了。
此代码无效。 slider 看起来是正确的,只是它超出了屏幕底部。 slider 边界甚至框架(Apple 称其无效)似乎与容器 View 的边界和框架相匹配。 slider 甚至不会停留在自己的范围内。
[super layoutSubviews];
CGRect trigLevelSliderFrame=self.trigLevelSliderContainer.bounds;
trigLevelSliderFrame.size.height=self.trigLevelSliderContainer.bounds.size.width;
trigLevelSliderFrame.size.width=self.trigLevelSliderContainer.bounds.size.height;
UISlider *mySlider=[[UISlider alloc] initWithFrame:trigLevelSliderFrame];
self.trigSlider=mySlider;
[mySlider release];
self.trigSlider.transform=CGAffineTransformMakeRotation(-M_PI_2);
CGPoint center=CGPointMake(self.trigLevelSliderContainer.bounds.size.width/2,self.trigLevelSliderContainer.bounds.size.height/2);
self.trigSlider.center=center;
[self.trigLevelSliderContainer addSubview:self.trigSlider];
最佳答案
这段代码添加和旋转 slider 没有问题。问题是代码必须放在 slider 父 View 的“layoutSubviews”方法中;相反,我将它放在 slider 父 View 的父 View 的“layoutSubviews”中。当我的原始代码执行时, slider 的父 View 尚未布局并且还没有正确的尺寸。
在 View 的“layoutSubviews”期间, subview 尚未布局,因此它们的边界尚未生效。我需要等到布局过程的后期才能获取父 View 的边界并将 slider 转换为适合。
最后,我将添加 slider 和转换 slider 的代码放在顶层 View Controller 的“viewDidAppear”中。这与原始问题中的代码相同 - 只是在不同的地方。
关于ios - 将垂直 UISlider 放入现有容器 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833107/