我有一个? constant高度约束和固定宽度约束的视图.在它内部,我有一个文本视图,其中包含该外部视图的前导/尾随/顶部/底部约束,实际上在该视图内"停靠"(只有几个点边距).我将文本视图的垂直内容压缩阻力优先级设置为750,并根据文本内容调整自身大小.当我进入第二行时它会增长,当我删除一行时会缩小等等.但是,我希望将增长/缩小设置为动画.我已将此代码添加到我的文本视图和外部视图的setFrame:代码中(它们都是自定义子类):
-(void)setFrame:(CGRect)frame{
[super setFrame:frame];
[UIView animateWithDuration:0.2 animations:^{
[self layoutIfNeeded];
} completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,它仍然没有动画.然后,我是子类NSLayoutConstraint,并setConstant:使用相同的代码覆盖其方法:
-(void)setConstant:(CGFloat)constant{
[super setConstant:constant];
if(self.shouldAnimate){
[UIView animateWithDuration:0.2 animations:^{
[self.firstItem layoutIfNeeded];
} completion:nil];
}
}
Run Code Online (Sandbox Code Playgroud)
它也不起作用.我在这些方法中放了一个断点,它们根本就没有被调用.显然,布局变化发生在较低的水平.我怎样才能使我的观点成长和缩小?一个选项是禁用内容压缩阻力优先级,计算文本更改时文本视图的高度,然后手动设置高度属性,并在那里设置动画.但是如果有一个更清晰的解决方案涉及使用内容压缩阻力进行动态/自动调整大小,我不想这样做.有解决方案吗?
我的应用程序支持从两个方向的4英寸以上的所有设备.
iPhone - 5,5S,5C,6,6S,6 +,6S +,SE
iPad 4,iPad Air,iPad Air2,iPad Pro等
使用资产目录启动屏幕它的工作正常,但在iPad Pro应用程序显示标准键盘,而iPad Pro优化键盘更大,并没有给用户最好的感觉.
如下所示链接应用程序应该使用启动故事板而不是资产图像来获得优化的iPad Pro原生键盘.
https://forums.developer.apple.com/thread/26357
现在的问题是如何在发布屏幕故事板中支持两种方向?
如何在故事板中为纵向和横向模式添加不同的启动图像?在两个方向上使用iPad的尺寸等级,包括常规和常规尺寸.
注 - 由于它启动了屏幕故事板,因此无法使用自定义类自定义大小类.
Autoresizing在使用XCode 9构建iOS11时,看起来视图不再可靠.
几个视图的布局最终会在XIB中定位控件,但是没有进行适当的调整.这在iOS10中运行良好,适用于在iOS11中运行的旧应用程序.但是,重建应用程序的定位和大小调整失败.
有什么改变会影响使用autoresizingmask吗?
有没有办法自动转换AutoResizing为AutoLayout and Constraints?
编辑:
给出麻烦的控件是UINavigationBar和UIToolBar.
在iOS 10之前,UIToolbar在其项目之间具有灵活的空格键按钮项目将自动减少字体,以便所有文本显示在屏幕上.以下示例(iOS 10):
从XCode 9开始,在模拟器上运行iOS 11时,我的工具栏显示如下:
文本不仅缩小了字体大小,而且最后一个条形按钮项(没有文本,只有图像)也消失了.
试图解决这个问题,我发现自iOS 11以来,UIToolbar现在使用的是Autolayout而不是Frames.与此问题相关的一些帖子建议为项目创建约束,指定项目的宽度和/或高度.
但是,我想要实现的是适合工具栏中的所有内容,即使这意味着减小字体大小.我认为我不能以编程方式设置固定的宽度/高度.
此外,这是在故事板上使用IB构建的.UIBarButtonclass不允许我访问UILabel(对于文本项)或ImageView(对于带有图像的项).我检查,customView是nil在运行时.
我试图通过代码创建项目,设置customView一个UILabel与adjustsFontSizeToFitWidth设置为true没有任何的运气.我不知道iOS 11上灵活空格键项的目的是什么.
那么,如何模仿我以前的行为呢?适合所有项目并自动调整文本大小?
我试图在所有设备上并排放置两个按钮,但不管我似乎添加了什么限制,我都会遇到类似这样的问题(一个按钮大于另一个按钮):

关于添加约束,我有什么想法吗?我只是通过Storyboard中的InterfaceBuilder来使用代码.
约束集:
回复:前导空格,底部空间,高度等于:45,尾随删除按钮
删除:尾随空格,底部空间,32:9比率,高度等于:45,导致回复Btn
TL; DR:第一次显示包含集合视图的单元格时autolayout引擎计算的高度总是错误的.调用reloadData()表视图可以解决问题,但也会使表视图跳转并无法使用.任何的想法?
解释:我有一个表视图,其中包含许多不同高度的不同单元格.
其中一个单元格是一个图像库,可以包含一个或多个异步加载的图像.
我有的限制如下:
我面临的问题如下:
当表视图第一次尝试显示图库单元格时,我收到了Super Annoying Encapsulated-Height-Layout问题.即使已更新集合视图上的高度约束,此封装高度始终具有错误值.
表格视图在第一次尝试时始终无法正确获取单元格的大小.
我正在使用Kingfisher来检索图像,这里是代码:
UICollectionViewCell数据源:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CarouselCollectionViewCell", forIndexPath: indexPath) as! CarouselCollectionViewCell
guard let collectionView = collectionView as? CarouselCollectionView else { return cell }
if let imagesURLs = data.imagesURLs {
let url = imagesURLs[indexPath.item]
if let smallURL = url.small {
KingfisherManager.sharedManager.retrieveImageWithURL(
smallURL,
optionsInfo: KingfisherOptionsInfo(),
progressBlock: nil,
completionHandler: { (image, error, cacheType, imageURL) -> () …Run Code Online (Sandbox Code Playgroud) 首先我要告诉大家的是,我在 Stack Overflow 上遇到了多个相同类型的问题,但它们都没有帮助我。
所以我创建了新问题来讨论我的问题。
我是 iOS 编程和 Storyboard 布局制作的初学者,所以每天在设计中遇到的问题很少。对于这个问题,我已经花了两天的时间,但对于专家来说,帮助我解决这个问题可能真的很容易。
我在布局中收到红色警告,因为 y 位置、高度以及我想要解决此问题的任何方式都需要限制。下图将使您更清楚地了解这一点:
具体来说,我在视频视图和下面的按钮中遇到了有关 y 位置限制的问题。
所以请建议我,如何解决这个问题?当我进行布局时,我多次遇到同样的问题,所以如果我学习这个解决方案,那么这对我来说将是很大的缓解。
我有一个应用程序
我尝试如下所示对其进行约束,但我缺少一个约束,而且我找不到我需要的东西。
self.view.addSubview(self.scrollView)
self.scrollView.snp.makeConstraints { (make) in
make.edges.equalTo(self.view)
}
let contentView = UIView()
self.scrollView.addSubview(contentView)
contentView.snp.makeConstraints { (make) in
make.top.bottom.equalTo(self.scrollView)
make.left.right.equalTo(self.view)
}
contentView.addSubview(self.chart)
self.chart.snp.makeConstraints { (make) in
// http://snapkit.io/docs/
make.edges.equalTo(contentView).inset(UIEdgeInsets(top: 30, left: 0, bottom: 50, right: 0))
}
Run Code Online (Sandbox Code Playgroud)
在哪里 scrollView = UIScrollView()
我正在尝试向我创建并添加以编程方式查看的表视图添加约束。我想根据 a 来约束它,UITextField这是一个IBOutlet. 但是,我收到以下错误:
*** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“无法激活带有锚点的约束,因为它们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?这是非法的。
@IBOutlet weak var authorTextField: UITextField!
override func viewDidLoad() {
myTableView = MyTableView(frame: CGRect(x: 0, y: 80, width: 320, height: 120), style: .plain)
myTableView!.isHidden = false
myTableView!.backgroundColor = UIColor.green
self.view.addSubview(myTableView!)
myTableView.setConstraints(to: authorTextField) // <-- this fails
Run Code Online (Sandbox Code Playgroud)
// MyTableView.swift ..
func setConstraints(to view: UIView)
self.translatesAutoresizingMaskIntoConstraints = false
self.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8.0).isActive = true
self.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8.0).isActive = true
}
Run Code Online (Sandbox Code Playgroud)
如何添加这个约束呢?
ios-autolayout ×10
ios ×7
autolayout ×6
swift ×3
objective-c ×2
xcode ×2
constraints ×1
ios11 ×1
ipad ×1
snapkit ×1
swift4 ×1
uistoryboard ×1
uitableview ×1
uitoolbar ×1
xcode9 ×1