请查看这个UILabel带有 Autolayout的动态多线的简单示例,它应该强制其超级视图增加高度。该示例在纵向模式下运行良好,而在横向模式下UILabel,高度增长过多。
我在故事板中设置了约束,标签的垂直压缩和拥抱优先级是 1000,超级视图的优先级是 1。视图之间的所有其他顶部、底部、前导和尾随约束都是标准的。
我用非常浅的灰色给标签的背景着色,所以很明显标签的顶部和底部边距比纵向模式大得多。有人可以建议我如何在横向中获得具有相同顶部和底部边距的标签吗?谢谢。

- (void)viewDidLoad
{
[super viewDidLoad];
self.myTextLabel.text = @"iPhone 6 rumoured to have larger display.";
}
- (IBAction)button:(UIButton *)sender
{
if (!self.flag) {
self.innerHeightConstraint.constant = 120.0;
self.myTextLabel.text = @"iPhone 6 rumoured to have larger, 1704 x 960 display. A new report indicates that Apple's testing it.";
self.flag = YES;
} else {
self.innerHeightConstraint.constant = 60.0;
self.myTextLabel.text = @"iPhone 6 rumoured to have larger display.";
self.flag = NO;
}
[self.view layoutIfNeeded];
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使我的应用程序中的视图可滚动。
O 完全按照教程https://www.youtube.com/watch?v=UnQsFlMGDsI 中的步骤操作。
我做的主要步骤是:
当我运行应用程序时,滚动视图不起作用
我真的无法让它发挥作用。我尝试了很多方法来应用 UIScrollView 并没有得到它。
我在 ANY-ANY 故事板类型的 ViewController 中有一个 UICollectionView 并使用快速自动布局。我已将 ViewController 的大小更改为 iPhone 5 屏幕大小。
问题是, UICollectionViewCell 中有一个按钮,我正在尝试使其循环。当我在 iPhone 5 中运行时,按钮会变成圆形,但如果我在 iPhone 6 或 6+ 中运行,它不会变成圆形。
下面是我在“cellForItemAtIndexPath”中使用的代码
var btnImage = cell.contentView.viewWithTag(100) as UIButton
btnImage.layer.masksToBounds = true
btnImage.layer.cornerRadius = btnImage.frame.size.height/2
Run Code Online (Sandbox Code Playgroud)
如果我使用下面的代码
var btnImage = cell.contentView.viewWithTag(100) as UIButton
btnImage.layoutIfNeeded()
btnImage.layer.masksToBounds = true
btnImage.layer.cornerRadius = btnImage.frame.size.height/2
Run Code Online (Sandbox Code Playgroud)
结果如下
有没有人对这个问题有任何想法。提前致谢。
我正在开发可可应用程序。它包含一个带有一些功能按钮的工具栏。就像里德一样。
我想在调整拆分视图大小的同时调整工具栏部分的大小。像下面这样工作。如何实现这种功能?
任何人都可以帮助我或提供一些建议将不胜感激。
我正在使用 XCode7、Swift 和 Storyboard 进行开发。
我最近阅读了一个关于视图的框架和边界属性的精彩问题 - UIView frame, bounds and center。我也尝试使用自动布局对此进行更多实验,现在我发现自己处于一个非常矛盾的场景中。请耐心等待,因为这可能需要一点时间。
我会一一强调它们,所以请帮助我克服所有这些 -
我拥有的?——
带有约束的视图层次结构如下 - (设计是在默认的 ViewController 大小为 600*600 上完成的)
我试图打印出这些视图的框架和边界 -
内容视图
print(contentView.frame)// o/p - (0.0, 64.0, 600.0, 536.0)
print(contentView.bounds)//o/p- (0.0, 0.0, 600.0, 536.0)
Run Code Online (Sandbox Code Playgroud)
Q) **a)**为什么无论我运行哪个屏幕,帧大小都显示为 600*536。例如。如果我在 4s 屏幕或 iPad 屏幕上运行它,它的打印结果是一样的吗?
**b)**它总是在我的故事板中推断出我的 VC 的大小!!。例如。如果我在 3.5 英寸 VC 中设计屏幕,则框架尺寸变为 320.0*416.0。
**c)**因为它固定到视图的所有边,所以它应该与视图大小相同,并且它始终保持固定到边缘。那么为什么它的大小不一样self.view.frame.width*self.view.frame.height
侧面图
print(sideView.frame)//o/p - (520.0, 86.0, 80.0, 128.0)
print(sideView.bounds)//o/p - (0,0, 80.0, 128.0)
Run Code Online (Sandbox Code Playgroud)
问)如果我以编程方式设计自定义 UIView
let TestView = UIView(frame: CGRectMake(520.0, 86.0, 80.0, 128.0))//Mark:its frame is exactly same as sideView.frame
TestView.backgroundColor …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我仅在其目标设置中将方向设置为纵向:
在一个特定的视图控制器中,我想覆盖此设置,以便在设备旋转时自动布局将更新视图。我试过这些方法没有成功:
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.AllButUpsideDown
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个居中的标签列表,沿着这条线,但居中:
图片来源:http : //blog.gqueues.com/2013/07/android-vs-ios-comparing-development.html
我认为一个很好的方法是扩展UIStackView,这样我就可以有一个“addData”函数来完成创建视图并将其添加到堆栈的过程。这是到目前为止的代码:
导入基础导入 UIKit
class DataView: UIStackView {
func addData(_ data: String) {
let view = UIView()
let label = UILabel()
view.backgroundColor = UIColor.blue
label.textColor = UIColor.white
label.text = data
label.sizeToFit()
view.frame.size = label.frame.size
view.addSubview(label)
self.addArrangedSubview(view)
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这看起来不太对。我可以让堆栈视图显示项目的唯一方法是对宽度或左右设置约束以强制宽度。我还需要将 `Stack View 设置设置为 Alignment:Fill 和 Distribution:Fill Equally 以查看它们中的任何一个。
我的有人知道如何在这里获得更好的结果吗?
我有一个非常简单的 UIScrollView,其中包含一些内容(许多子视图)。此滚动视图用于显示用户发布的一些帖子(图像 + 文本)。这些视图之一实际上是作者的图像,它溢出底部单元格边界。因此它与后面的单元格重叠,使用clipToBounds = false我可以获得所需的结果。如果我向下滚动,一切都很好。当我开始向上滚动时,以前覆盖的视图现在被剪裁了。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = (indexPath.row % 2 == 0) ? "FeedCellLeft" : "FeedCellRight";
let cell = feedScrollView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! FeedCell;
self.setUpCell(cell, atIndexPath: indexPath);
return cell
}
Run Code Online (Sandbox Code Playgroud)
该setUpCell函数只是执行一些 UI 相关的任务
let row = indexPath.row
cell.postImage.downloadImageFrom(link: rows[row].image, contentMode: .scaleToFill)
cell.postAuthorImage.downloadImageFrom(link: "https://pbs.twimg.com/profile_images/691867591154012160/oaq0n2zy.jpg", contentMode: .scaleToFill)
cell.postAuthorImage.layer.cornerRadius = 22.0;
cell.postAuthorImage.layer.borderColor = UIColor.white.cgColor
cell.postAuthorImage.layer.borderWidth = 2.0;
cell.postAuthorImage.layer.masksToBounds = true;
cell.selectionStyle = .none
cell.postData.layer.cornerRadius …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码将视图约束到父 UIScrollView 的左右锚点。
尽管右锚和左锚被设置为 ScrollView 的左锚和右锚,但视图不会扩展以填充滚动视图。
注意:这张图片中的灰色背景是 UIScrollView 的背景,所以我知道它被正确地限制在它的父视图中。
代码:
self.wtfView.translatesAutoresizingMaskIntoConstraints = false
self.wtfView.backgroundColor = UIColor.orange
self.wtfView.topAnchor.constraint(equalTo: self.passwordField.bottomAnchor, constant: 40.0).isActive = true
self.wtfView.leftAnchor.constraint(equalTo: self.containerView.leftAnchor, constant: 40.0).isActive = true
self.wtfView.rightAnchor.constraint(equalTo: self.containerView.rightAnchor, constant: 40.0).isActive = true
self.wtfView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
self.wtfView.bottomAnchor.constraint(equalTo: self.containerView.bottomAnchor, constant: 40.0).isActive = true
Run Code Online (Sandbox Code Playgroud)
编辑:以下代码工作正常,但我更喜欢使用左+右锚点技术来指定宽度,而不是在宽度约束下。那不应该吗?
self.wtfView.translatesAutoresizingMaskIntoConstraints = false
self.wtfView.backgroundColor = UIColor.orange
self.wtfView.topAnchor.constraint(equalTo: self.passwordField.bottomAnchor, constant: 40.0).isActive = true
self.wtfView.leftAnchor.constraint(equalTo: self.containerView.leftAnchor, constant: 40.0).isActive = true
self.wtfView.widthAnchor.constraint(equalTo: self.containerView.widthAnchor, constant: -80.0).isActive = true //THE DIFFERENT ONE
self.wtfView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
self.wtfView.bottomAnchor.constraint(equalTo: self.containerView.bottomAnchor, constant: …Run Code Online (Sandbox Code Playgroud) 我定义了一个像这样的网格视图:
let lb01 = NSTextField(labelWithString: "01")
....
let gridView = NSGridView(views:
[ [empty, lb01],
[empty, lb02],
[lb03, lb04]
])
gridView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(gridView)
let layoutViewMap = ["another View": anotherView, "GridView": gridView]
var constraintList = [NSLayoutConstraint]()
let constraintV = NSLayoutConstraint.constraints( withVisualFormat: "V:[GridView]-50-[anotherView]", options: [], metrics: nil, views: layoutViewMap)
constraintList += constraintV
let constraintH = NSLayoutConstraint.constraints( withVisualFormat: "|-20-[GridView(==300)]", options: [], metrics: nil, views: layoutViewMap)
constraintList += constraintH
NSLayoutConstraint.activate(constraintList)
Run Code Online (Sandbox Code Playgroud)
在某些情况下,网格视图的高度会增加
我可以定义一个明确的高度
let constraintV = NSLayoutConstraint.constraints( withVisualFormat: "V:[GridView(==70)]-50-[anotherView]", options: [], metrics: nil, views: layoutViewMap) …Run Code Online (Sandbox Code Playgroud) autolayout ×10
ios ×7
swift ×6
cocoa ×2
uiscrollview ×2
bounds ×1
cocoa-touch ×1
frames ×1
iphone ×1
nssplitview ×1
nstoolbar ×1
objective-c ×1
storyboard ×1
uistackview ×1
xcode ×1
xcode6 ×1