更新: 这是iOS 10问题。这仍然像以前一样在iOS 9中运行。
这很有意思。
我刚刚转换了我的"教学项目" (a"玩具" app)到Swift 3。
它已经在Swift 1.2下工作了几年。
突然之间,即使我将contentSize设置为超出其下边界,我的UIScrollView也不会滚动。
这里是相关代码(displayTags例程使用显示为居中且略微垂直偏移的图像数组调用,从而产生垂直链):
/*******************************************************************************************/
/**
\brief Displays the tags in the scroll view.
\param inTagImageArray the array of tag images to be displayed.
*/
func displayTags ( inTagImageArray:[UIImage] )
{
self.tagDisplayView!.bounds = self.tagDisplayScroller!.bounds
if ( inTagImageArray.count > 0 ) // We need to have images to display
{
var offset:CGFloat = 0.0 // This will be the vertical offset for each tag.
for tag in inTagImageArray
{
self.displayTag ( inTag: tag, inOffset: &offset )
}
}
}
/*******************************************************************************************/
/**
\brief Displays a single tag in the scroll view.
\param inTag a UIImage of the tag to be displayed.
\param inOffset the vertical offset (from the top of the display view) of the tag to be drawn.
*/
func displayTag ( inTag:UIImage, inOffset:inout CGFloat )
{
let imageView:UIImageView = UIImageView ( image:inTag )
var containerRect:CGRect = self.tagDisplayView!.frame // See what we have to work with.
containerRect.origin = CGPoint.zero
let targetRect:CGRect = CGRect ( x: (containerRect.size.width - inTag.size.width) / 2.0, y: inOffset, width: inTag.size.width, height: inTag.size.height )
imageView.frame = targetRect
containerRect.size.height = max ( (targetRect.origin.y + targetRect.size.height), (containerRect.origin.y + containerRect.size.height) )
self.tagDisplayView!.frame = containerRect
self.tagDisplayView!.addSubview ( imageView )
self.tagDisplayScroller!.contentSize = containerRect.size
print ( "Tag Container Rect: \(containerRect)" )
print ( " Tag ScrollView Bounds: \(self.tagDisplayScroller!.bounds)" )
inOffset = inOffset + (inTag.size.height * 0.31)
}
请注意,每次添加标记时都会展开scrollView的contentSize。我检查了(见打印语句),值似乎是正确的。
The project itself is completely open-source.
This is where this issue manifests(我还有其他的错误,但在我指出这个错误之后我会解决它们。)
我确信我正在做一些明显和愚蠢的事情(通常是这种情况)。
有人有什么想法吗?
答案 0 :(得分:12)
当您在主线程上设置contentSize
并将此代码放入- (void)viewDidLayoutSubviews
- (void)viewDidLayoutSubviews
{
dispatch_async (dispatch_get_main_queue(), ^
{
[self.scrollview setContentSize:CGSizeMake(0, 2100)];
});
}
答案 1 :(得分:7)
contentSize应该在swift的主线程中更改。
DispatchQueue.main.async {
self.scrollView.contentSize = CGSize(width: 2000, height: 2000)
}
这对我有用。
答案 2 :(得分:4)
行。我解决了。
我在构建时删除内部(滚动)视图的每个自动布局约束。
我认为iOS 10终于通过强制滚动视图的顶部附加到滚动条的顶部来表达合同,即使用户想要移动它。