Skip to content

Commit 375f257

Browse files
authored
iOS 26: Fix buttons in Editor (#24779)
* Fix close button layout * Fix the publish button layout * Fix separators for buttons
1 parent ea208f1 commit 375f257

File tree

6 files changed

+18
-120
lines changed

6 files changed

+18
-120
lines changed

WordPress/Classes/ViewRelated/Aztec/ViewControllers/AztecPostViewController.swift

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,6 @@ class AztecPostViewController: UIViewController, PostEditor {
552552
override func viewWillAppear(_ animated: Bool) {
553553
super.viewWillAppear(animated)
554554

555-
configureDismissButton()
556555
startListeningToNotifications()
557556
verificationPromptHelper?.updateVerificationStatus()
558557
}
@@ -733,11 +732,6 @@ class AztecPostViewController: UIViewController, PostEditor {
733732
navigationItem.titleView = navigationBarManager.blogTitleViewLabel
734733
}
735734

736-
func configureDismissButton() {
737-
let image = isModal() ? Assets.closeButtonModalImage : Assets.closeButtonRegularImage
738-
navigationBarManager.closeButton.setImage(image, for: .normal)
739-
}
740-
741735
func configureView() {
742736
edgesForExtendedLayout = UIRectEdge()
743737
view.backgroundColor = Colors.aztecBackground
@@ -3089,8 +3083,6 @@ extension AztecPostViewController {
30893083
}
30903084

30913085
struct Assets {
3092-
static let closeButtonModalImage = UIImage.gridicon(.cross)
3093-
static let closeButtonRegularImage = UIImage(systemName: "chevron.backward")
30943086
static let defaultMissingImage = UIImage.gridicon(.image)
30953087
static let linkPlaceholderImage = UIImage.gridicon(.pages)
30963088
}

WordPress/Classes/ViewRelated/Blog/Blog Details/Detail Header/SiteDetailsSiteIconView.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,6 @@ final class SiteDetailsSiteIconView: UIView {
9595
@objc func touchedButton() {
9696
tapped?()
9797
}
98-
99-
func removeButtonBorder() {
100-
button.layer.borderWidth = 0
101-
}
10298
}
10399

104100
extension SiteDetailsSiteIconView: UIDropInteractionDelegate {

WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -439,11 +439,6 @@ class GutenbergViewController: UIViewController, PostEditor, PublishingEditor {
439439
navigationBarManager.moreButton.showsMenuAsPrimaryAction = true
440440
}
441441

442-
private func reloadBlogIconView() {
443-
let viewModel = SiteIconViewModel(blog: post.blog, size: .small)
444-
navigationBarManager.siteIconView.imageView.setIcon(with: viewModel)
445-
}
446-
447442
private func reloadEditorContents() {
448443
let content = post.content ?? String()
449444

@@ -456,7 +451,6 @@ class GutenbergViewController: UIViewController, PostEditor, PublishingEditor {
456451
}
457452

458453
private func refreshInterface() {
459-
reloadBlogIconView()
460454
reloadEditorContents()
461455
reloadPublishButton()
462456
navigationItem.rightBarButtonItems = post.status == .trash ? [] : navigationBarManager.rightBarButtonItems

WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,6 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
220220
navigationBarManager.moreButton.showsMenuAsPrimaryAction = true
221221
}
222222

223-
private func reloadBlogIconView() {
224-
let viewModel = SiteIconViewModel(blog: post.blog, size: .small)
225-
navigationBarManager.siteIconView.imageView.setIcon(with: viewModel)
226-
}
227-
228223
// TODO: this should not be called on viewDidLoad
229224
private func reloadEditorContents() {
230225
let content = post.content ?? String()
@@ -238,7 +233,6 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
238233
}
239234

240235
private func refreshInterface() {
241-
reloadBlogIconView()
242236
reloadEditorContents()
243237
reloadPublishButton()
244238
navigationItem.rightBarButtonItems = post.status == .trash ? [] : navigationBarManager.rightBarButtonItems

WordPress/Classes/ViewRelated/Post/PostEditor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ extension PostEditor {
9090
}
9191

9292
var alertBarButtonItem: UIBarButtonItem? {
93-
return navigationBarManager.closeBarButtonItem
93+
navigationBarManager.closeButton
9494
}
9595
}
9696

WordPress/Classes/ViewRelated/Post/PostEditorNavigationBarManager.swift

Lines changed: 17 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,6 @@ protocol PostEditorNavigationBarManagerDelegate: AnyObject {
1515
func navigationBarManager(_ manager: PostEditorNavigationBarManager, displayCancelMediaUploads sender: UIButton)
1616
}
1717

18-
class ExtendedTouchAreaButton: UIButton {
19-
private var touchAreaPadding: CGFloat = 24.0
20-
21-
override var isHighlighted: Bool {
22-
didSet {
23-
UIView.animate(withDuration: 0.2) {
24-
self.alpha = self.isHighlighted ? 0.5 : 1.0
25-
}
26-
}
27-
}
28-
29-
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
30-
let extendedArea = bounds.insetBy(dx: -touchAreaPadding, dy: -touchAreaPadding)
31-
return extendedArea.contains(point)
32-
}
33-
}
34-
3518
// A class to share the navigation bar UI of the Post Editor.
3619
// Currenly shared between Aztec and Gutenberg
3720
//
@@ -40,56 +23,14 @@ class PostEditorNavigationBarManager {
4023

4124
// MARK: - Buttons
4225

43-
/// Dismiss Button
44-
///
45-
let siteIconView: SiteDetailsSiteIconView = {
46-
let siteIconView = SiteDetailsSiteIconView(frame: .zero)
47-
siteIconView.translatesAutoresizingMaskIntoConstraints = false
48-
siteIconView.imageView.sizeToFit()
49-
50-
let widthConstraint = siteIconView.widthAnchor.constraint(equalToConstant: 28)
51-
let heightConstraint = siteIconView.heightAnchor.constraint(equalToConstant: 28)
52-
NSLayoutConstraint.activate([widthConstraint, heightConstraint])
53-
siteIconView.isUserInteractionEnabled = false
54-
siteIconView.removeButtonBorder()
55-
return siteIconView
56-
}()
57-
58-
lazy var closeButton: UIButton = {
59-
let button = UIButton(type: .system)
60-
button.setImage(UIImage(systemName: "chevron.backward"), for: .normal)
61-
button.sizeToFit()
62-
button.translatesAutoresizingMaskIntoConstraints = false
63-
button.configuration?.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)
64-
button.isUserInteractionEnabled = false
65-
return button
66-
}()
67-
68-
lazy var closeButtonContainer: ExtendedTouchAreaButton = {
69-
let button = ExtendedTouchAreaButton(type: .custom)
70-
button.translatesAutoresizingMaskIntoConstraints = false
71-
button.accessibilityIdentifier = "editor-close-button"
26+
private(set) lazy var closeButton: UIBarButtonItem = {
27+
let button = UIBarButtonItem(image: UIImage(systemName: "xmark"), style: .plain, target: self, action: #selector(closeWasPressed))
7228
button.accessibilityLabel = NSLocalizedString("Close", comment: "Action button to close the editor")
73-
74-
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(closeWasPressed))
75-
button.addGestureRecognizer(tapGesture)
76-
77-
button.addSubview(closeButton)
78-
button.addSubview(siteIconView)
79-
80-
NSLayoutConstraint.activate([
81-
closeButton.leadingAnchor.constraint(equalTo: button.leadingAnchor, constant: -8),
82-
closeButton.centerYAnchor.constraint(equalTo: button.centerYAnchor),
83-
siteIconView.leadingAnchor.constraint(equalTo: closeButton.trailingAnchor, constant: 0),
84-
siteIconView.trailingAnchor.constraint(equalTo: button.trailingAnchor),
85-
siteIconView.centerYAnchor.constraint(equalTo: button.centerYAnchor)
86-
])
87-
button.isUserInteractionEnabled = true
88-
button.frame = CGRect(x: 0, y: 0, width: 70, height: 28)
29+
button.accessibilityIdentifier = "editor-close-button"
8930
return button
9031
}()
9132

92-
lazy var undoButton: UIButton = {
33+
private(set) lazy var undoButton: UIButton = {
9334
let isRTL = UIView.userInterfaceLayoutDirection(for: .unspecified) == .rightToLeft
9435
let undoImage = UIImage(named: "editor-undo")
9536
let button = UIButton(type: .system)
@@ -103,7 +44,7 @@ class PostEditorNavigationBarManager {
10344
return button
10445
}()
10546

106-
lazy var redoButton: UIButton = {
47+
private(set)lazy var redoButton: UIButton = {
10748
let isRTL = UIView.userInterfaceLayoutDirection(for: .unspecified) == .rightToLeft
10849
let redoImage = UIImage(named: "editor-redo")
10950
let button = UIButton(type: .system)
@@ -117,7 +58,7 @@ class PostEditorNavigationBarManager {
11758
return button
11859
}()
11960

120-
lazy var moreButton: UIButton = {
61+
private(set)lazy var moreButton: UIButton = {
12162
let image = UIImage(named: "editor-more")
12263
let button = UIButton(type: .system)
12364
button.setImage(image, for: .normal)
@@ -129,23 +70,17 @@ class PostEditorNavigationBarManager {
12970
}()
13071

13172
/// Blog TitleView Label
132-
lazy var blogTitleViewLabel: UILabel = {
73+
private(set) lazy var blogTitleViewLabel: UILabel = {
13374
let label = UILabel()
13475
label.textColor = UIAppColor.appBarText
13576
label.font = Fonts.blogTitle
13677
return label
13778
}()
13879

13980
/// Publish Button
140-
private(set) lazy var publishButton: UIButton = {
141-
let button = UIButton(type: .system)
142-
button.addTarget(self, action: #selector(publishButtonTapped(sender:)), for: .touchUpInside)
143-
button.setTitle(delegate?.publishButtonText ?? "", for: .normal)
144-
button.sizeToFit()
81+
private(set) lazy var publishButton: UIBarButtonItem = {
82+
let button = UIBarButtonItem(title: delegate?.publishButtonText, style: .plain, target: self, action: #selector(publishButtonTapped))
14583
button.isEnabled = delegate?.isPublishButtonEnabled ?? false
146-
button.setContentHuggingPriority(.required, for: .horizontal)
147-
button.tintColor = UIColor(light: .black, dark: .white)
148-
button.titleLabel?.font = UIFont.systemFont(ofSize: 17.0)
14984
return button
15085
}()
15186

@@ -170,22 +105,6 @@ class PostEditorNavigationBarManager {
170105
return separator
171106
}()
172107

173-
/// NavigationBar's Close Button
174-
///
175-
lazy var closeBarButtonItem: UIBarButtonItem = {
176-
let cancelItem = UIBarButtonItem(customView: self.closeButtonContainer)
177-
cancelItem.accessibilityLabel = NSLocalizedString("Close", comment: "Action button to close edior and cancel changes or insertion of post")
178-
cancelItem.accessibilityIdentifier = "Close"
179-
return cancelItem
180-
}()
181-
182-
/// Publish Button
183-
private(set) lazy var publishBarButtonItem: UIBarButtonItem = {
184-
let button = UIBarButtonItem(customView: self.publishButton)
185-
186-
return button
187-
}()
188-
189108
/// NavigationBar's More Button
190109
///
191110
lazy var moreBarButtonItem: UIBarButtonItem = {
@@ -222,7 +141,7 @@ class PostEditorNavigationBarManager {
222141
// MARK: - Public
223142

224143
var leftBarButtonItems: [UIBarButtonItem] {
225-
return [closeBarButtonItem]
144+
return [closeButton]
226145
}
227146

228147
var uploadingMediaTitleView: UIView {
@@ -232,16 +151,19 @@ class PostEditorNavigationBarManager {
232151
var rightBarButtonItems: [UIBarButtonItem] {
233152
let undoButton = UIBarButtonItem(customView: self.undoButton)
234153
let redoButton = UIBarButtonItem(customView: self.redoButton)
235-
return [publishBarButtonItem, separatorButtonItem, moreBarButtonItem, separatorButtonItem, redoButton, separatorButtonItem, undoButton]
154+
if #available(iOS 26, *) {
155+
return [publishButton, separatorButtonItem, moreBarButtonItem, redoButton, undoButton]
156+
} else {
157+
return [publishButton, separatorButtonItem, moreBarButtonItem, separatorButtonItem, redoButton, separatorButtonItem, undoButton]
158+
}
236159
}
237160

238161
var rightBarButtonItemsAztec: [UIBarButtonItem] {
239-
return [moreBarButtonItem, publishBarButtonItem, separatorButtonItem]
162+
return [moreBarButtonItem, publishButton, separatorButtonItem]
240163
}
241164

242165
func reloadPublishButton() {
243-
publishButton.setTitle(delegate?.publishButtonText ?? "", for: .normal)
244-
publishButton.sizeToFit()
166+
publishButton.title = delegate?.publishButtonText
245167
publishButton.isEnabled = delegate?.isPublishButtonEnabled ?? true
246168
}
247169
}

0 commit comments

Comments
 (0)